我需要将 /home/user 文件夹从一个硬盘复制到另一个硬盘。它有 100,000 个文件,大小约为 10G。
我用
cp -r /origin /destination
有时我会因为链接断开、权限等原因而遇到一些错误。因此我修复了错误,然后需要重新开始复制。
我想知道如何告诉命令“cp”,一旦它尝试再次复制,如果文件存在于目标文件夹中,就不要再次复制文件。
答案1
cp -R -u -p /source /destination
这-u
(或者--update
) 标志的作用如下:
来自 cp 的手册页:
-u,--更新
仅当源文件比目标文件新或目标文件丢失时才复制
答案2
答案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