如何使用find命令搜索多个扩展名

如何使用find命令搜索多个扩展名

我可以jpg使用以下方法获取所有图像:

find . -name "*.jpg"  

但如何将png文件添加到结果中呢?

答案1

-o在不同参数之间使用标志。

find ./ -type f \( -iname \*.jpg -o -iname \*.png \)奇迹般有效。

笔记那里必须括号与其内容之间必须有一个空格,否则它将不起作用。

解释:

  • -type f- 只搜索文件(不搜索目录)
  • \(& \)- 需要-type f适用于所有参数
  • -o- 逻辑或运算符
  • -iname- 类似-name,但匹配不区分大小写

答案2

您可以将条件与-oas结合起来沙杜尔建议。请注意, 的-o优先级低于并置,因此您可能需要括号。

find . -name '*.jpg' -o -name '*.png'
find . -mtime -7 \( -name '*.jpg' -o -name '*.png' \)  # all .jpg or .png images modified in the past week

在 Linux 上,您可以使用-regex更简洁的方式组合扩展。默认的正则表达式语法是 Emacs (基本正则表达式加上一些扩展,例如\|交替);有一个选项可以切换到扩展正则表达式

find -regex '.*\.\(jpg\|png\)'
find -regextype posix-extended -regex '.*\.(jpg|png)'

在 FreeBSD、NetBSD 和 OSX 上,您可以-regex结合使用-E来扩展正则表达式。

find -E . -regex '.*\.(jpg|png)'

答案3

这是更正确的:

find . -iregex '.*\.\(jpg\|gif\|png\|jpeg\)$'

答案4

如果只需要文件:

find ./ -type f -regex '.*\.\(jpg\|png\)$'

例如,这不会匹配名为“blah.jpg”的目录。

相关内容