如何使用find命令查找所有带有扩展名的文件?

我需要从目录(gif,png,jpg,jpeg)查找所有图像文件。

find /path/to/ -name "*.jpg" > log 

如何修改这个string来查找不仅仅是.jpg文件?

 find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log 
 find /path/to/ -iname '*.gif' -o -iname '*.jpg' -o -iname '*.png' -o -iname '*.jpeg' 

将工作。 可能有一个更优雅的方式。

find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log

-E可以帮助您避免在正则expression式中逃离parens和pipe道。

 find /path/to/ -type f -print0 | xargs -0 file | grep -i image 

这使用file命令来尝试识别文件的types,而不pipe文件名(或扩展名)。

如果/path/to或文件名包含stringimage ,则上述可能会返回假冒命中。 在这种情况下,我会build议

 cd /path/to find . -type f -print0 | xargs -0 file --mime-type | grep -i image/ 

作为@Dennis Williamson上面的回答的补充,如果你想让相同的正则expression式对文件扩展名不区分大小写,可以使用-iregex:

 find /path/to -iregex ".*\.\(jpg\|gif\|png\|jpeg\)" > log 
 find /path -type f \( -iname "*.jpg" -o -name "*.jpeg" -o -iname "*gif" \) 
 find -regex ".*\.\(jpg\|gif\|png\|jpeg\)" 

在Mac OS上使用find -E packages -regex ".*\.(jpg|gif|png|jpeg)"