Linux查找并复制具有相同名称的文件到目标文件夹不会覆盖

时间:2016-07-29 03:26:57

标签: linux find cp

我想在一个文件夹中找到并复制*.jpg的所有文件,并将其子文件夹包含到另一个文件夹中 我用

find /tempL/6453/ -name "*.jpg" |  xargs  -I  '{}' cp {} /tempL/;

但它会覆盖同名文件

例如/tempL/6453/中有test (1).jpg test (2).jpg和文件夹1,在/tempL/6453/1/中,也有同名文件test (1).jpg { {1}}

如果我使用上述命令,test (2).jpg中只有两个文件test (1).jpg test (2).jpg,则无法将所有文件复制到/tempL/

我想要的是将所有文件复制到/tempL/,当文件名相同时,只需重命名,如何?

2 个答案:

答案 0 :(得分:1)

  

我想要的是将所有文件复制到/ tempL /,当有相同的文件名时,只需重命名它们,如何?

1)如果你没有覆盖cp --backup将为现有文件提供备份,--suffix选项为cp,你也可以指定用于备份

2)--parents的{​​{1}}选项将保留目录树,即文件夹1中的文件将复制到新创建的1文件夹。

3)如果要自定义重命名处理,则不能仅使用cp命令。为它编写脚本并调用它来处理cp

的结果

答案 1 :(得分:1)

安装“ GNU parallel”并使用:

find /tempL/6453/ -name "*.jpg" | parallel 'cp {} ./dest-dir/`stat -c%i {}`_{/}'

{/}  ................. gets filename with no full path

我认为xargs可以使用相同的方法,但是对我而言,了解并行非常了不起,它为我们提供了许多漂亮的解决方案。

我建议在echo之前使用cp来测试您的命令