通过Linux命令行检查文件是否为空

通过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([)检查条

我想用bash脚本检查目录中具有相同扩展名的文件是否为空,如果不为空,则打印出文件名。
find
(GNU
find
)的作业,假设要匹配的扩展名为
.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解决方案。