我有一个脚本,如果文件存在或不存在,我想显示不同的消息。 我有一个脚本,如:
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语句中使用它来显示不同的消息?
count=$(find /import -maxdepth 1 -name '*.zip' | wc -l)
试试这个:
count=$(find /import/ -maxdepth 1 -type f -name '*.zip' | wc -l) ... if [ $count -gt 0 ] ; then ... else ... fi
这个想法是隐藏打印到STDERR的“没有这样的文件”的错误,通过发送到bitbucket,并使用适当的testingfunction来比较数字。 ( -gt代表“大于”,还有-eq , -lt , -ge等)
我试过你的脚本,正如所料,当没有匹配的文件时,它在输出中显示0个文件,但也显示了之前的ls错误。 解决这个问题非常简单,没有必要把ls 。 用这个replace第一行:
count=$(ls /import/*.zip 2>/dev/null| wc -l)
2>/dev/null将stderrredirect到/dev/null ,从而抑制错误消息。