有没有办法检查`cp -r`是否会覆盖任何东西?

时间:2019-01-01 17:59:26

标签: bash cp

是否有一种方法可以检查cp -r是否覆盖任何内容,而无需实际复制任何内容?

-n似乎复制了不会冲突的文件,这不是我想要的。

3 个答案:

答案 0 :(得分:2)

最简单的方法是使用rsync命令,那里有很多参数可以覆盖目标或根据需要删除目标上的文件。

https://linux.die.net/man/1/rsync

或如注释中所述,您可以将cp -n用于--no-clobber。但总的来说,我建议您使用rsync进行操作。

答案 1 :(得分:0)

cp具有-i --interactive选项和-n,-no-clobber选项。 参见“ man 1 cp”。

答案 2 :(得分:0)

要仅检查文件是否存在于目标位置,而实际上不执行任何复制,则可以将diff命令与-r选项一起使用。

来自man diff

  

-r,--recursive
  递归比较找到的所有子目录

diff -r --brief --report-identical-files /source-folder/ /target-folder/ | grep -v '^Only in'
  • --brief列出了不同的文件(与-q相同)
  • --report-identical-files对于没有区别的文件(与-s相同)相同
  • grep -v '^Only in'删除仅位于一个目录树中的文件,因为这些文件不会被覆盖。

输出将如下所示:

Files /source-folder/file1.txt and /target-folder/file1.txt are identical
Files /source-folder/file2.jpg and /target-folder/file2.jpg differ