如何使用 rsync 将一个巨大的源副本分成两个目标?

如何使用 rsync 将一个巨大的源副本分成两个目标?

我有 3 个驱动器。为此,我们分别将它们称为 A、B 和 C。

A 是 2 TB

B 为 1 TB

C 为 500 GB

我已经跑了

rsync -avz -progress A B

现在 B 已满,我想移动/复制不是已经在 B 上从 A 到 C

对于我来说,A 上发生什么真的不重要,因为无论如何我都会重新格式化。

答案1

列出 B 上的所有文件,使用以下命令:find转到该驱动器并运行:

$ find . > files-on-b.xt

然后当你rsync从 A 到 C 时,在参数中指定该列表--exclude-from

$ rsync -avz --exclude-from=files-on-b.txt A C

您可能需要对列表中的前缀进行调整,以确保它与 rsync 期望从排除列表中获得的格式/相对目录相匹配。运行 rsync 时选择-n查看它要做什么而不实际执行它总是一个好主意。

rsync 手册页这篇有用的博客文章了解更多信息--exclude-from

答案2

您可以利用该--compare-dest选项。这样可以节省一些时间和空间,因为您不必枚举第一个目标的全部内容,并且可以逐步处理许多目标。它的工作原理如下:将内容从 A 复制到 B 后,运行:

rsync -avz --compare-dest=/path/to/B /path/to/A/ /path/to/C/

rsync 将使用 B 的内容来查看需要将哪些内容传输到 C 以使 A 的副本完整。B 中已有的任何内容都不会被传输。请注意,--compare-dest 的绝对路径是必需的,否则该路径将被视为相对于目标的路径。

如果您无论如何必须进一步分割您的目的地,您可以通过添加更多--compare-dest参数来与多个先前的目标进行比较。

相关内容