rsync 比较目标问题

rsync 比较目标问题

更新清晰度我想同步两个目录 - 一个桌面文件夹和一个外部硬盘。此外,我想将源目录(桌面文件夹)和目标(外部硬盘)之间的所有新文件/更改文件复制到第三个位置。

我努力了:rsync -bauvn --compare-dest /thirddirectory /desktopfolder/ /externalharddrive

正如评论中所解释的,当我这样做时,我得到了正确的更改文件列表,但它会复制到外部硬盘驱动器而不是第三个目录。

我也尝试过: rsync -bauvn --compare-dest /externalharddrive /desktopfolder/ /thirddirectory 当我这样做时,即使是在我运行之后,rsync -bauv /desktopfolder/ /externalharddrive我也会得到一个很长的文件列表来复制到第三个目录,而不仅仅是差异。

任何帮助使用 rsync 制作一个准确的第三个目录,仅复制桌面文件夹和外部硬盘之间的差异都将不胜感激!!(感谢您的帮助,roaima!!)

老的


我正在尝试使用 rsync 备份我的数据。我是新手,所以我需要尽可能多的帮助。通常,一年下来,我的 500GB MacBook 上会有 8TB 的数据。我主要处理包文件。我没有计算机的管理员权限。我们的 IT 部门可能会帮助我进行一次性更改,但现在可能不行。(为了更新 rsync 等。)

我已成功将我的 MacBook 文件夹与 4TB 外部硬盘上的主文件夹同步。但是,为了安全起见,我喜欢将新文件复制到 Box 或 Google Drive 上的云中。由于我通常处理包文件,因此将新文件/更改的文件复制到第三个目的地是理想的选择,因为我可以将它们压缩并上传到云中。如果未将包文件压缩到 Box 和驱动器中,则效果不佳。

从 MacBook 复制到外部驱动器文件夹时,rsync 运行良好。我使用rsync -bauvn .../Desktop/20-21\ Mac \ Folder/ /Volumes/Jack\ Passport/20-21\ Passport\ Folder

当尝试使用 --compare-dest 时我使用rsync -bauvn --compare-dest /Volumes/Jack\ Passport/20-21\ Passport\ Folder .../Desktop/20-21\ Mac \ Folder/ .../123dest

当我使用 --compare-dest 时,我得到了不同的结果:复制的文件列表比我简单地从 macbook 复制到外部驱动器时要长得多。

即使我必须以不同的方式来执行此操作,即使用从 MacBook 到外部驱动器同步的文件列表或类似方法将文件复制到第三个位置,我完全可以接受。

我只想要一种方法,在一天结束时,我只需按一下按钮即可将文件从我的 Mac 复制到硬盘,然后再按一下按钮,我就有了一个需要压缩并上传到云端的项目文件夹。任何帮助都将不胜感激。

答案1

您想要创建一个精确的第三个目录 ( ),该目录仅复制桌面文件夹 ( ) 和外部硬盘驱动器/thirddirectory之间的差异。/desktopfolder/externalharddrive

这很简单,但正如您所发现的,您无法同时更新外部硬盘驱动器。

rsync -av --compare-dest=/externalharddrive /desktopfolder/ /thirddirectory

此时,您有几个选择,但无论如何,您都会遇到问题,无法rsync识别已从源中删除的文件。反过来,这意味着您的备份将无法代表/desktopfolder

  1. 您可以使用--write-batch(反之亦然--read-batch)生成一批更改,这些更改可rsync在以后输入。但是,尝试直接从中恢复文件是不可能的,因此可能不太适合备份。

  2. 您可以将用作 中更新的/externalharddrive文件的备份。您随后带到其他地方的外部硬盘上的文件与当前备份相差一步,因此这可能并不理想。但是,这可能是最简单的/thirddirectory/desktopfolder

    rsync -av --backup --backup-dir=/外部硬盘/桌面文件夹/ /第三目录

  3. 您识别差异集,更新这些更改,并使用原始差异集来确定要保存到其他地方的文件。代码使用 GNU 扩展来处理带有非打印字符(如换行符)的文件名

     diffdir1() { ( cd "$1" && find . -type f -printf "%s\t%T+\t%y\t%#m\t%U\t%G\t%p\0" | LC_ALL=C sort -z ); }
    
     comm -z -23 <(diffdir1 /desktopfolder) <(diffdir1 /externalharddrive) |
         cut -z -f7- |
         rsync -av --from0 --files-from - /desktopfolder /thirddirectory
    
     comm -z -23 <(diffdir1 /desktopfolder) <(diffdir1 /externalharddrive) |
         cut -z -f7- |
         rsync -av --from0 --files-from - /desktopfolder /externalharddrive
    

    diffdir1 /desktopfolder您可以通过捕获文件或变量的输出并将其用作两个comm命令的输入来避免明显的竞争条件。

  4. 不要再尝试使用rsync,而是考虑类似的东西borg。在所有选项中,这可能是最有希望的

相关内容