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

find . -name "*.jpg"  


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

评论

相关:在SO
处找到与多个模式匹配的-name模式

#1 楼

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

find ./ -type f \( -iname \*.jpg -o -iname \*.png \)就像一个超级按钮。

注意括号与内容之间必须有空格,否则将不起作用。

说明:



-type f-仅搜索文件(而非目录)

\(\)-需要-type f适用于所有参数

-o-逻辑或运算符

-iname-与-name类似,但匹配项不区分大小写


评论


您需要括号吗?没有它们,该命令对我有用。是否需要一些外壳?

– MikeD
17年3月19日在2:25

@miked该命令将在没有它们的情况下“起作用”,是的,但是您最终会获得以.png结尾的目录以及以.jpg结尾的文件的命中率,这并非完全正确。

– Shadur
17年3月19日在8:25

感谢您的澄清!类型-f不会扩展并且不带括号而适用于两个表达式,因此,找到./ -type f -iname \ *。jpg -o -type f -iname \ *。png也可以工作,尽管它是两个字符更长的时间:-)

– MikeD
17年3月19日在11:58

这是运算符优先级的问题。就像* b + c与*(b + c)不同

– Shadur
17 Mar 19 '17 at 12:13



@jdhao好捕获,已修改。

– Shadur
18-10-24在8:34

#2 楼

您可以按照Shadur的建议将标准与-o结合使用。请注意,-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(基本的regexp加上一些扩展名,例如\|表示交替);

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


在FreeBSD,NetBSD和OSX上,可以将-regex-E结合使用以扩展正则表达式。 />
find -E . -regex '.*\.(jpg|png)'


评论


始终最好使用-iname而不是-name-然后还将捕获image.JPG和image.PnG

–ccpizza
17年11月11日在10:48

#3 楼

这更正确:

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


评论


您为什么说它是“更多”正确的?

–凯文
2012年11月17日,下午3:51

@Kevin我猜是因为-iregex匹配jpg以及JPG Jpg jpG等。我认为不需要$。

– ott--
2015年5月19日在10:41

这在MinGW上工作正常。

– Peter Mortensen
15年9月18日在11:30

首先,您省略了搜索文件夹作为第一个参数,这将引发错误。其次,在OSX上,转义括号是行不通的,应改为使用:find -E。 -iregex'。* \。(jpg | png | gif)',如@sorin的答案所示。

–ccpizza
17年11月11日在11:36

#4 楼

明确地说,在Linux,Unix和macOS风格上可用的唯一选项是:

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


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

评论


-E标志在Ubuntu 14.04上无效

– gogaman
2014年7月25日在17:33



-E标志在MinGW上也无效(至少我尝试过的版本/配置(特定版本的默认配置))。

– Peter Mortensen
15/09/18在11:29



-type f \(-iname \ *。png -o -iname \ *。jpg \)的哪一部分在OSX上不起作用?

– Shadur
18年4月16日在7:43

可以确认-type f \(-iname \ *。png -o -iname \ *。jpg \)在OSX上可以正常工作

– Steve Vermeulen
19年11月5日在16:22

#5 楼

/\.(jpe?g|png|gif|bmp)$/i;


使用它。

评论


您可能需要对此稍作解释。

–混乱
16年1月15日在7:33