我想找到目录中图像文件的数量。我最终使用了这个:
find . -type f -exec file {} \; | grep -c -i 'image'
感觉这是一种低效的方法。我可以想到另一种方法 - 使用 OR 语句,但我无法从手册页中找出如何做到这一点。
有什么想法可以更有效地完成此操作吗?我不想在包含大量文件的目录上执行上述命令并让它永远耗费时间。
答案1
如果要按扩展名搜索图片,可以使用以下命令:
find -type f -name *.gif -o -name *.jpg -o -name *.bmp
当然,您需要列出所有您感兴趣的扩展。
要获取计数,您可以附加| wc -l
。
答案2
\+
您可以使用而不是来提高效率\;
。这里的区别是\+
将所有找到的文件传递给一次执行,file
其中对找到的每个文件\;
执行一次。file
find . -type f -exec file {} \+ | grep -c -i 'image'
file
如果找到的文件数量超过可以作为参数接收的文件数量,您就会遇到问题。如果是这种情况,您可以xargs
使用选项将其通过管道传输。--max-args
答案3
如果你想通过 mime 类型(本例中为“image”)查找文件,你需要执行以下命令
find . -type f -print0 | xargs -0 file -i | grep -i image | wc -l