使用-exec cp覆盖复制文件

时间:2018-08-07 15:33:12

标签: linux bash copy exec cp

mkdir zipFiles

find . -name '*.zip' -exec cp {} zipFiles/  \;

Error:
cp: ‘./zipFiles/status.zip’ and ‘zipFiles/status.zip’ are the same file

我尝试使用这些命令来强制复制以覆盖现有文件,但是它们都不起作用;

find . -name '*.zip' -exec cp {} zipFiles/  \;
find . -name '*.zip' -exec cp -f {} zipFiles/  \;
find . -name '*.zip' -exec cp -rf {} zipFiles/  \;
find . -name '*.zip' -exec cp {} -rf zipFiles/  \;

2 个答案:

答案 0 :(得分:2)

您不希望find搜索zipFiles。一种方法是

find . -name '*.zip' \( ! -path '*/zipFiles/*.zip' \) -exec cp {} zipFiles/ \;

要加快处理速度,请使用-exec ... +cp一次复制尽可能多的文件。要么

find . ... -exec sh -c 'cp "$@" zipFiles' _ {} +

或者,如果您使用的是GNU cp

find . ... -exec cp -t zipFiles {} +

答案 1 :(得分:0)

您可以使用rsync命令:

  

rsync源目标

  

rsync --force源目标