尝试失败后如何cp剩余文件


23

我正在尝试将一个大目录从一个驱动器复制到另一个驱动器。我在完成之前错误地注销了,因此仅复制了大约80%的文件。是否可以复制其余文件而无需从头开始?

Answers:


35

我会尝试,

rsync -a /from/file /dest/file

您可以使用其他选项,如--append-P (--partial --progress)。有关更多信息,请参见man rsync

或者,如果您正在使用,请cp使用cp -u

来自man cp

-u, --update
     copy only when the SOURCE file is newer than the destination file or when the destination file is missing.

1
我必须把它给拉胡尔·库斯,他只是打败了你,但是谢谢,每个人都得到了支持!
barro32 '16

3
如果第一个副本突然结束,则其中的一个文件可能仅被部分复制,因此cp -u可能并不在意,因为它仅检查时间戳,而不检查大小...因此,touch如果必须使用它,则需要先获取源文件。(或只是使用rsync。)
ilkkachu 2016年

@ilkkachu是的。我会尽快更新。
拉胡尔

cp是否会只留下部分传输的单个文件?如果确实如此,那么-u似乎会让您留下一个仅部分起作用的目录。
Trevor

15

对于部分文件传输,cp可能不是您所需要的。

我建议rsync改用。即使传输失败,您也可以稍后稍后重新运行该命令,它只会复制丢失的文件。

例:

$ rsync -aPEmivvz from/ to/

(将复制from/to/目录中)

由于rsync每次传输后都会进行同步和检查,因此确保正确复制文件非常简单。

该SWICH集-aPEmivvz是我的标准去到的选择,只要复制文件通过网络或外部驱动器,包括插入式设备,如SD卡,等等。

这些是我几乎总是使用的开关:

-a:“归档”,包括-rlptgo(递归,作为符号链接的符号链接,权限,时间,组,所有者)

-P:“部分进度”显示每个文件的进度条

-E:“可执行性”保留是否可执行

-m:“ noempty”修剪空目录

-i:所有更新的“摘要”打印更改摘要

-vv:“更详细”

-z:“压缩”


6

您可能想要的而不是cp这种情况rsync

只需将一个目录结构递归复制到新位置:

rsync -av /path/to/source /path/to/destination 

4

您不应该cp为此使用。正如其他人所言,这不是完成这项工作的正确工具。正确的工具将取决于您的目标。

如果您只想直接复制:

rsync /source /destination带有一些标志。有关其他一些非常好的示例,请参见其他答案。

如果要进行双向更新

unison是要走的路。Rsync在双向同步的冲突解决方面做得不好。特别删除。所以你想双向复制unison

如果您要备份并且文件是基于文本的,则可以尝试使用git。Git可以在本地运行,不需要“服务器”。实际上,git服务器只是文件共享方法。您完全可以在备份驱动器上有一个git repo并“推送”到它。同样,这仅在文件基于文本并且您试图获得单向备份的情况下才有效。

同样,如果您要备份(而不仅仅是一次),那么请查看deja-dupe,BackIntime或类似选项。他们在某个时间点拍摄数据快照。它们都在后台运行rsync。


4

您还可以再次复制所有文件,要求对每次覆盖进行确认,然后自动回答以下问题:

yes n | cp -i /source /dest

(您可能已经使用了更多选项,例如-r,因此只需添加它们即可cp -pri /source /dest...)


3

将命令rsync与以下选项一起使用:

rsync --progress --partial --append /source_file /destination_file
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.