#!/bin/bash
if [ -e *.txt ] then
rm *.txt
echo "removing previous files"
else
echo "files already deleted"
fi
如果我有多个txt文件,我正在尝试删除当前目录中的所有txt文件,但出现错误。不太清楚发生了什么。
答案 0 :(得分:3)
例如,如果您有两个文件1.txt和2.txt,则您的代码基本上会导致:
if [ -e 1.txt 2.txt ]
…
这只会引发语法错误,因为-e
需要一个参数。
您可以依靠某些CLI工具,例如find
,但也许您一开始就不需要if
?
类似于:
rm -f *.txt
为避免在没有*.txt
文件的情况下失败,
否则:
rm -f -v *.txt
如果您还想获取一些已删除文件的日志。
答案 1 :(得分:1)
保持if ... fi
逻辑,这里不需要进行-e
测试。 Unix utils本身被设计为返回退出代码,在这种情况下,测试rm
本身的结果更简单:
if rm *.txt 2> /dev/null
then
echo "removing previous files"
else
echo "files already deleted"
fi
但是即使不需要,也请注意可以进行单独的测试,如下所示:
if [ "$(ls *.txt)" ]
...或者使用纯bash
,(不需要像ls
这样的外部实用程序),如果我们暂时将 nullglob 选项设置为
if (shopt -s nullglob; [ "$(echo *.txt)" ])