![使用 rsync 从包含大量相同文件的两个位置进行备份](https://linux22.com/image/101349/%E4%BD%BF%E7%94%A8%20rsync%20%E4%BB%8E%E5%8C%85%E5%90%AB%E5%A4%A7%E9%87%8F%E7%9B%B8%E5%90%8C%E6%96%87%E4%BB%B6%E7%9A%84%E4%B8%A4%E4%B8%AA%E4%BD%8D%E7%BD%AE%E8%BF%9B%E8%A1%8C%E5%A4%87%E4%BB%BD.png)
我有 2 个 1TB 的外部存储设备,我想将所有这些备份到服务器上。我想使用 rsync 来执行此操作,但我发现每个设备上的约 100,000 个文件中,约 80,000 个文件是相同的(具有相同的名称和目录路径)。我可以分别对这两个文件进行 rsync,这将合并文件,但我想要一种方法来找出“相互”文件是否包含相同的内容,因为我不想丢失修改后的文件(如果它们已被修改)。有没有办法使用 rsync 检查这一点?
答案1
您可以考虑使用 rsync 的“-c”标志来检查文件的校验和。如果mod时间和大小相同。然后它会进行校验和以确定文件是否具有相同的内容。更多内容请看这里 ==>https://serverfault.com/questions/211005/rsync-difference- Between-checksum-and-ignore-times-options
答案2
随后,要仅同步远程计算机上已在本地计算机上更改的更新或修改的文件,我们可以在复制文件之前执行试运行,如下所示:
rsync -av --dry-run --update Documents/* [email protected]:/<directory>
如果结果没问题,使用这个
rsync -av --update Documents/* [email protected]:/<directory>
欲了解更多信息,请参阅:http://www.howtoing.com/sync-new-changed-modified-files-rsync-linux/
答案3
对于这两种传输,您可以使用:
rsync --ignore-existing -i dir1/ [email protected]:/dir2/
对于第一次传输,它只会传输所有文件并列出它们。
对于第二次传输,它将忽略已存在的文件 ( --ignore-existing
) 并列出它实际复制的所有文件 ( -i
)。然后,您可以选择通过使用获取所有文件的列表来复制传输中遗漏的文件find
,并删除传输 2 的输出中列出的文件。
不幸的是,如果文件已经存在,则无法将其复制到稍微不同的文件名,这将需要一些额外的逻辑和循环。