那么基本上我可以使用 rsync 来恢复最初由另一个程序(wget、curl、scp、ftp...)启动的文件/目录的传输吗?
答案1
是的。但为了获得最佳性能,您应该注意您使用的选项。
下载文件时,请注意保留文件修改时间。文件同步实用程序通常假设如果源文件和目标文件具有相同的大小和相同的修改时间,则它们具有相同的内容。这显着加快了多个文件的同步速度。如果修改时间不同则rsync必须读取双方的内容来决定是否传输文件。
- 与 一起
wget
,使用-N
(--timestamping
)。 - 与 一起
curl
,使用-R
(--remote-time
)。 - 与
cp
,scp
, 使用-p
(或-a
对于 GNUcp
)。 - 与
rsync
、使用-t
或-a
。 (rsync -a
除非您了解为什么在特定情况下不需要它,否则您应该始终使用它。) - FTP 程序通常会复制时间戳。
- 您可以通过传递选项来告诉 rsync 假设源文件和目标文件具有相同的大小,则它们是相同的
--size-only
。如果修改文件的唯一方法是通过在末尾添加数据来增长文件,那么这是可以的,在这种情况下,您可能也应该传递该--append
选项。但是,如果可以通过其他方式修改文件,那么--size-only
就不安全:如果修改碰巧没有改变文件大小,您可能会错过修改。
如果您使用普通rsync -a
则:
- 目标中不存在的文件将被简单复制。
- 复制目标中存在但具有不同时间戳或不同大小的文件。 Rsync 将尝试通过其增量传输算法最小化传输的数据量,如果文件具有相同的部分,则可以节省传输量。
- 目标中存在且具有相同时间戳和大小的文件将被跳过。
如果您确定两侧的文件是相同的或截断的副本,那么您可以通过该--append
选项。使用此选项,rsync 假定目标中的任何文件都是部分或完整副本,并将直接将丢失的数据附加到较短的文件,而不检查文件的开头是否两侧相同。这更快但更脆弱。