在 Linux 中复制文件,如果目标中存在文件则避免复制

在 Linux 中复制文件,如果目标中存在文件则避免复制

我需要将 /home/user 文件夹从一个硬盘复制到另一个硬盘。它有 100,000 个文件,大小约为 10G。

我用

cp -r /origin /destination

有时我会因为链接断开、权限等原因而遇到一些错误。因此我修复了错误,然后需要重新开始复制​​。

我想知道如何告诉命令“cp”,一旦它尝试再次复制,如果文件存在于目标文件夹中,就不要再次复制文件。

答案1

cp -R -u -p /source /destination

-u或者--update) 标志的作用如下:

来自 cp 的手册页:

-u,--更新

仅当源文件比目标文件新或目标文件丢失时才复制

答案2

只需使用cp -n <source> <dest>

手册页

-n, --no-clobber

不要覆盖现有文件(覆盖先前的 -i 选项)

答案3

rsync -aq /src /dest

除了只复制较新的文件外,如果文件已更改,它甚至会只复制较新的部分。它旨在用于通过网络链接进行复制,以便最大限度地减少数据量 - 但它在本地也运行良好。

答案4

POSIX 解决方案

其他答案使用-u-n选项cp。这些都不是POSIX 要求;也不是rsync来自另一个答案;也没有yes在其中一条评论中使用。

不过,我们可以yes n通过while循环来重现。这导致了以下 POSIX 解决方案:

while true; do echo n; done | cp -Ri /origin /destination 2>/dev/null

相关内容