it-swarm.cn

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

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

find . -name "*.jpg"  

但是如何将png个文件也添加到结果中?

143
wong2

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

find ./ -type f \( -iname \*.jpg -o -iname \*.png \)的作用就像是一个吊饰。

[〜#〜] note [〜#〜]必须括号和其内容之间必须有一个空格,否则它将不起作用。

说明:

  • _-type f_-仅搜索文件(不搜索目录)
  • _\(_和_\)_-需要_-type f_才能应用于所有参数
  • _-o_-逻辑OR运算符
  • _-iname_-类似于_-name_,但是匹配不区分大小写
176
Shadur

您可以将条件与-o由Shadur建议 。注意 -o的优先级低于并列,因此您可能需要括号。

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

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

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

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

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

这更正确:

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

为了明确起见,在Linux,Unix和macOS风格上可用的唯一选项是:

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

这是因为OS X版本略有不同,但是编写在大多数平台上都能正常运行的东西很重要。

9
sorin