![用于计算文件数量的 Bash 脚本](https://linux22.com/image/551643/%E7%94%A8%E4%BA%8E%E8%AE%A1%E7%AE%97%E6%96%87%E4%BB%B6%E6%95%B0%E9%87%8F%E7%9A%84%20Bash%20%E8%84%9A%E6%9C%AC.png)
我有一个脚本,我想在文件存在与否时显示不同的消息。我有一个如下脚本:
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
,抑制错误消息。