我需要将 /home/user 文件夹从一个硬盘复制到另一个硬盘。它有 100,000 个文件和大约 10G 的大小。
我用
cp -r /origin /destination
有时,由于链接、权限等原因,我会遇到一些错误。所以我修复了错误,并需要重新开始复制。
我想知道如何告诉命令“cp”,一旦它尝试再次复制,如果目标文件夹中存在文件,则不要再次复制它们。
use*_*894 34
cp -R -u -p /source /destination
该-u(或--update)标志不只是这一点:
从 cp 的手册页:
-u, --update
仅当 SOURCE 文件比目标文件新或目标文件丢失时才复制
Mar*_*ett 23
rsync -aq /src /dest
除了只复制较新的文件外,它甚至只会在文件发生更改时复制文件的较新部分。它旨在通过网络链接复制您想要最小化数据量的地方 - 但它在本地也能很好地工作。
其他答案使用-u 或-n选项cp. POSIX 不需要这些;也不是rsync来自另一个答案;也没有yes在评论之一中使用。
尽管如此,我们仍然可以yes n用while循环来重现。这导致了以下 POSIX 解决方案:
while true; do echo n; done | cp -Ri /origin /destination 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
查找该cp命令的“-u”选项。
小智 5
使用cp -rn <sourcedirname>/. <destdirname>
r 开关使副本在目录上递归。
n 开关(长版本 no-clobber)确保现有文件永远不会被覆盖。
sourcedirname 后面的' /.' 确保它不会成为 destdirname 下的子目录,而不是将前者的所有内容复制到后者。