Bash 测试是否存在某种类型的文件
我在bash中有一个脚本,它应该对我的工作目录中的所有文本文件进行分类,并将它们放在指定的目录中。它工作正常,但一旦使用,当我再次尝试使用它时,会收到以下错误消息:Bash 测试是否存在某种类型的文件,bash,shell,file,Bash,Shell,File,我在bash中有一个脚本,它应该对我的工作目录中的所有文本文件进行分类,并将它们放在指定的目录中。它工作正常,但一旦使用,当我再次尝试使用它时,会收到以下错误消息: ls: cannot access '*.txt': No such file or directory 我理解这基本上是因为我的工作目录中不再有任何文本文件,但我想做的是,在脚本中执行任何其他操作之前,首先检查当前目录中是否存在任何“.txt”文件,这样我就可以退出脚本,而不必显示此消息 我知道可以通过以下方式对特定文件执行此操
ls: cannot access '*.txt': No such file or directory
我理解这基本上是因为我的工作目录中不再有任何文本文件,但我想做的是,在脚本中执行任何其他操作之前,首先检查当前目录中是否存在任何“.txt”文件,这样我就可以退出脚本,而不必显示此消息
我知道可以通过以下方式对特定文件执行此操作:
FILE=/myfile.txt
if test -f "$FILE"; then
...
else
exit 1
fi
但我想对任何以“.txt”结尾的文件执行此操作。您可以使用空globbing,但stat也可以执行此操作:
if stat -t -- *.txt >/dev/null; then
echo 'found text files'
else
exit 1
fi
您可以通过使用
nullglob
选项来避免该问题。例如:
shopt -s nullglob
for txtfile in *.txt ; do
# Put code for classifying "$txtfile" here
done
导致匹配nothing的glob模式(例如shopt-s nullglob
)展开为nothing*.txt
将为当前目录中的每个对于*.txt中的txtfile…
文件执行循环体。启用.txt
后,如果目录中没有nullglob
文件,它将不执行任何操作.txt