用于计算文件数量的 Bash 脚本

用于计算文件数量的 Bash 脚本

我有一个脚本,我想在文件存在与否时显示不同的消息。我有一个如下脚本:

count=ls /import/*.zip | wc -l

echo "Number of files: " $count
if [ "$count" > "0" ]; then
    echo "Import $count files"
else
    echo "**** No files found ****"
fi

但是,如果不存在文件,则显示的内容No such file or directory不是 0 个文件。/import/目录中有一个目录,因此我不能只执行命令,ls因为那样总是会返回大于 0 的值。

我如何计算特定扩展名(.zip、.gz 等)的文件数量,并在 bash 脚本中使用该值显示文件数量,然后在 if 语句中使用它来显示不同的消息?

答案1

count=$(find /import -maxdepth 1 -name '*.zip' | wc -l)

答案2

尝试一下这个:

count=$(find /import/ -maxdepth 1 -type f -name '*.zip' | wc -l)
...
if [ $count -gt 0 ] ; then
  ...
else
  ...
fi

这个想法是通过将“没有这样的文件”错误发送到 bitbucket 来隐藏打印到 STDERR 的“没有这样的文件”错误,并使用适当的测试函数来比较数字。 (代表-gt“大于”。还有-eq,,,等等)-lt-ge

答案3

我尝试了你的脚本,正如预期的那样,当没有文件匹配时,它在输出中显示 0 个文件,但也显示ls之前的错误。解决这个问题很容易,不需要抛弃ls。只需将第一行替换为以下内容:

count=$(ls /import/*.zip 2>/dev/null| wc -l)

2>/dev/null将 stderr 重定向到/dev/null,抑制错误消息。

相关内容