我想在一个文件夹中找到并复制*.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/
,当文件名相同时,只需重命名,如何?
答案 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
来测试您的命令