如何使用find命令查找列表中包含扩展名的所有文件?

Kir*_*lla 171 unix shell find

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

find /path/to/ -name "*.jpg" > log
Run Code Online (Sandbox Code Playgroud)

如何修改此字符串以查找不仅仅是.jpg文件?

Pau*_*ce. 178

find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
Run Code Online (Sandbox Code Playgroud)

  • 在Mac上不适用于我,但是使用-E(扩展)选项(管道是扩展功能吗?):find -E/path/to -iregex".*\.(jpg | gif | png | jpeg)">日志 (6认同)

Jos*_*seK 133

find /path/to/ -iname '*.gif' -o -iname '*.jpg' -o -iname '*.png' -o -iname '*.jpeg'
Run Code Online (Sandbox Code Playgroud)

将工作.可能会有更优雅的方式.

  • -iname将不区分大小写 (16认同)

tbo*_*e12 24

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

这样-E可以避免在正则表达式中逃脱parens和pipe.

  • 适用于Mac OS. (7认同)
  • 我的发现没有这个-E (2认同)
  • @ tboyce12在ubuntu上,我可以指定-regextype来简化regex表达式:`find。-regextype posix扩展-regex“。* \。(jpg | gif | png | jpeg)”`。 (2认同)

unu*_*tbu 11

find /path/to/ -type f -print0 | xargs -0 file | grep -i image
Run Code Online (Sandbox Code Playgroud)

这使用该file命令尝试识别文件的类型,无论文件名(或扩展名)如何.

如果/path/to或文件名包含字符串image,则上述内容可能会返回虚假命中.在那种情况下,我建议

cd /path/to
find . -type f -print0 | xargs -0 file --mime-type | grep -i image/
Run Code Online (Sandbox Code Playgroud)


7yn*_*k3r 7

在 Mac OS 上使用

find -E packages  -regex ".*\.(jpg|gif|png|jpeg)"
Run Code Online (Sandbox Code Playgroud)


gho*_*g74 6

find /path -type f \( -iname "*.jpg" -o -name "*.jpeg" -o -iname "*gif" \)
Run Code Online (Sandbox Code Playgroud)

  • 您能否解释一下为什么在name / iname参数周围添加(转义)括号? (2认同)

小智 6

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

find /path/to -iregex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
Run Code Online (Sandbox Code Playgroud)