jpg
图像:find . -name "*.jpg"
但是如何将
png
文件也添加到结果中?#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
评论
相关:在SO处找到与多个模式匹配的-name模式