通过Linux命令行检查文件是否为空
我想用bash脚本检查目录中具有相同扩展名的文件是否为空,如果不为空,则打印出文件名。通过Linux命令行检查文件是否为空,linux,bash,command-line,Linux,Bash,Command Line,我想用bash脚本检查目录中具有相同扩展名的文件是否为空,如果不为空,则打印出文件名。find(GNUfind)的作业,假设要匹配的扩展名为.txt,要检查的目录为/directory: find /directory -maxdepth 1 -type f -name '*.txt' -not -empty 递归地: find /directory -type f -name '*.txt' -not -empty 慢速shell方式,使用for对文件进行迭代,并使用test([)检查条
find
(GNUfind
)的作业,假设要匹配的扩展名为.txt
,要检查的目录为/directory
:
find /directory -maxdepth 1 -type f -name '*.txt' -not -empty
递归地:
find /directory -type f -name '*.txt' -not -empty
慢速shell方式,使用
for
对文件进行迭代,并使用test
([
)检查条件:
for f in /directory/*.txt; do [ -f "$f" ] && [ -s "$f" ] && echo "$f"; done
递归地使用bash
的globstar
:
shopt -s globstar
for f in /directory/**/*.txt; do [ -f "$f" ] && [ -s "$f" ] && echo "$f"; done
老实说,我没有尝试过任何东西,因为我对shell脚本没有太多的经验。我可以编写一些东西来只检查一个特定的文件,但不知道如何检查500多个具有特定扩展名的文件,并打印出不是空的文件名。“慢shell方式”可以使用/directory/*.txt;do[[-f$f&&&s$f]]&&echo“$f”;done中针对f的特定于Bash的语法
稍微缩短一点。如果这个“慢”,我不会感到惊讶(尽管我没有测试过)对于文件数较低的目录,解决方案速度更快,因为启动外部命令的开销不可忽略。@Fred hmmmm…考虑过这一点,但问题是另一个较慢的部分,即使用for
对文件进行迭代仍然存在,因此查找应该是解决方法…@heemayl In m在ost情况下,这并不重要,因此我会选择任何更适合的解决方案,如果性能是一个问题,我会对代表性数据进行测试,看看是否存在显著差异。如果不先进行测试,我不会因为假设性能会更差而低估纯shell解决方案。