我正在查看许多子目录并查找以.JPG .jpg和.png结尾的所有文件,并将它们复制到一个单独的目录中,但是现在它只发现了.JPG
有人可以解释我做错了吗?
find /root/TEST/Images -name '*.png' -o -name '*.jpg' -o -name '*.JPG' -exec cp -t /root/TEST/CopiedImages {} +
答案 0 :(得分:2)
您必须对-o
条件进行分组,因为-a
,最后-name '*.JPG'
和-exec
之间隐含的AND有higher precedence:
find /root/TEST/Images \( -name '*.png' -o -name '*.jpg' -o -name '*.JPG' \) -exec cp -t /root/TEST/CopiedImages {} +
使用括号进行分组,但由于它们的特殊含义是shell,因此必须对它们进行转义(或引用)。
与此无关,您可以通过将jpg
和JPG
的过滤条件与不区分大小写的-iname
(如评论中所述)组合来缩短整体表达式:
find /root/TEST/Images \( -name '*.png' -o -iname '*.jpg' \) -exec cp -t /root/TEST/CopiedImages {} +