Bash 测试是否存在某种类型的文件

Bash 测试是否存在某种类型的文件,bash,shell,file,Bash,Shell,File,我在bash中有一个脚本,它应该对我的工作目录中的所有文本文件进行分类,并将它们放在指定的目录中。它工作正常,但一旦使用,当我再次尝试使用它时,会收到以下错误消息: ls: cannot access '*.txt': No such file or directory 我理解这基本上是因为我的工作目录中不再有任何文本文件,但我想做的是,在脚本中执行任何其他操作之前,首先检查当前目录中是否存在任何“.txt”文件,这样我就可以退出脚本,而不必显示此消息 我知道可以通过以下方式对特定文件执行此操

我在bash中有一个脚本,它应该对我的工作目录中的所有文本文件进行分类,并将它们放在指定的目录中。它工作正常,但一旦使用,当我再次尝试使用它时,会收到以下错误消息:

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
  • shopt-s nullglob
    导致匹配nothing的glob模式(例如
    *.txt
    )展开为nothing
  • 对于*.txt中的txtfile…
    将为当前目录中的每个
    .txt
    文件执行循环体。启用
    nullglob
    后,如果目录中没有
    .txt
    文件,它将不执行任何操作

我不清楚最后一句的意思。它基本上是指任何文本文件,即以“.txt”结尾