find . -type f -iname "*.jpg" -exec cp {} JPG \;
我正在编写 shell 脚本,在将图像文件复制到新目录时出现错误:are the same
答案1
该JPG
目录位于当前目录中。您正在使用 递归搜索当前目录find
。这意味着JPG
名称匹配*.jpg
(不区分大小写)的任何文件都将被复制到其自身。
为了避免这种情况,请使用
find . -path ./JPG -prune -o -type f -iname '*.jpg' -exec cp {} ./JPG \;
JPG
每当找到该目录时,这都会从搜索树中删除该目录(即不考虑它进行搜索)。
为了加快操作速度,如果你有 GNU cp
,你可以使用
find . -path ./JPG -prune -o -type f -iname '*.jpg' -exec cp -t ./JPG {} +
这将cp
批量调用找到的 JPEG 文件,而不是每个找到的文件调用一次。
只需调用一次即可产生类似的效果rsync
:
rsync -av --exclude=/JPG --include='*.jpg' --include='*/' --exclude='*' ./ ./JPG
(尽管这不会不*.jpg
区分大小写地进行匹配,除非您更改--include='*.jpg'
为--include='*.[jJ][pP][gG]'
)。