我可以jpg
使用以下方法获取所有图像:
find . -name "*.jpg"
但如何将png
文件添加到结果中呢?
答案1
-o
在不同参数之间使用标志。
find ./ -type f \( -iname \*.jpg -o -iname \*.png \)
奇迹般有效。
笔记那里必须括号与其内容之间必须有一个空格,否则它将不起作用。
解释:
-type f
- 只搜索文件(不搜索目录)\(
&\)
- 需要-type f
适用于所有参数-o
- 逻辑或运算符-iname
- 类似-name
,但匹配不区分大小写
答案2
您可以将条件与-o
as结合起来沙杜尔建议。请注意, 的-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”的目录。