Rsync 的工作语法 复制一组 2 个或更多硬链接文件夹树,同时维护此特定的存档结构?

Rsync 的工作语法 复制一组 2 个或更多硬链接文件夹树,同时维护此特定的存档结构?

Rsync 的工作语法 复制一组 2 个或更多硬链接文件夹树,同时维护此特定的存档结构?

PS:这会更适合 SO 还是 SU SE 吗?

当前/示例文件夹结构模板:

Base Folder (Source): 

C:\iMazing
   \Backups

    \{device A UDID} // Last backup of Device A (AL)
    \{device B UDID} // Last backup of Device B (BL)
    \iMazing.Versions 

       \Versions
          \{device A UDID} // Backup history of Device A (AL) 
          \{device B UDID} // Backup history of Device B (BH)
Base Folder (Destination): 

S:\ExtHDD\APPLE\iMazing.Backups  

    \{device A UDID} // Last backup of Device A (AL)
    \{device B UDID} // Last backup of Device B (BL)
    \iMazing.Versions 

       \Versions
          \{device A UDID} // Backup history of Device A (AH) 
          \{device B UDID} // Backup history of Device B (BH)


具有 UDID 名称的文件夹下的文件夹树

  • AL : {device A UDID} // 设备 A 的最后一次备份
  • AH : {device A UDID} // 设备A的备份历史
  • AL 和 AH 形成一个 2 组,其间有硬链接。
  • 我们希望一次进行单独的工作

如何使用 Rsync(最好通过 Cygwin RSync 或提到的 Windows 变体之一)来:

  • 复制一个硬链接单独集例如 {AL + AH}从C盘到S盘同时
    • 保留硬链接
    • 维护子树文件夹结构
  • 不会在 Windows 或其 NTFS 文件夹和文件结构上造成问题

还:

  • 我们可以一次只执行一个单独的设置(一个 RSync 命令)还是多个指定的设置?
  • 通常我们有 2 个 SET,如果结构内有 3 个 SET(带有 3 个 HL 文件夹的 SET),Rsync 的命令行将如何更改

带有 UDID 文件夹名称的真实/实际示例:

  • XL & XH 是硬链接文件夹树,一起组成一个 SET
Base Folder (Source): 
C:\Users\UserName\AppData\Roaming\iMazing\Backups

  \f22ebcffcdd1b508d3f7564431a9db98d69208ef-20190414-170122 //..(XL)  
  \iMazing.Versions
   \Versions  
    \f22ebcffcdd1b508d3f7564431a9db98d69208ef-20190414-170122 //..(XH)

保存硬链接复制的工具参考列表:
https://superuser.com/questions/997190/copy-to-another-ntfs-disk-and-preserve-hard-links/

  • 同步Windows下的变化
    • (多个 *Nix 和 Windows:Cygwin 变体、CW RSync、Delta Copy/ Syncrify/ Synaman、GRsync、RsyncBackup、Rsync.exe pkg、Rclone、AcroSync、YInterSync)
  • ln.exe - 命令行硬链接-http://schinagl.priv.at/nt/ln/ln.html(赢)

答案1

我发现很难理解您对这个问题的早期迭代,因此我将重申我认为您的意思的简化版本,以及相应的工作示例:

结构

C:\iMazing\Backups\
    AL\
        files...
    BL\
        files...
    iMazing.Versions\Versions\
        AH\
            files...
        BH\

S:\ExtHDD\APPLE\iMazing.Backups\
    AL\
        destination files...
    BL\
        destination files...
    iMazing.Versions\Versions\
        AH\
            destination files...
        BH\
            destination files...

要求是在保持硬链接和相对结构的同时进行复制AL\...AH\...C:到。S:

工作示例

mkdir -p iMazing/Backups/{AL,BL,iMazing.Versions/Versions/{AH,BH}} ExtHDD/APPLE/iMazing.Backups
touch iMazing/Backups/{AL/albackup,BL/blbackup}
touch iMazing/Backups/iMazing.Versions/Versions/{AH/ahbackup,BH/bhbackup}

此时你可以ls -R或者find看看我做了什么。、、、、目录中应该有文件albackupahbackup、。我们将把和目录复制到目标:blbackupbhbackupALAHBLBHALAH

rsync --dry-run -avHPR iMazing/Backups/./AL iMazing/Backups/./iMazing.Versions/Versions/AH ExtHDD/APPLE/iMazing.Backups/

-R( )标志--relative保留标记的源路径/./。在示例中,这意味着iMazing/Backups/被剥离,并将剩余部分附加到目标路径。

--dry-run删除( )后,-n这会将文件和目录从源 AL 和 AH 目录复制到目标,同时维护内部硬链接和结构。

问题解答

由于这是 Cygwin,因此您需要使用正斜杠和以/cygdrive/{DriveLetter}.要维护链接,您需要包含-H标志 ( --hard-links)。

rsync -aHR /cygdrive/C/iMazing/Backups/./AL /cygdrive/C/iMazing/Backups/./iMazing.Versions/Versions/AH /cygdrive/ExtHDD/APPLE/iMazing.Backups/

如果您想查看发生了什么,可以包含-v( --verbose) 和/或-P( ) 标志。--partial --progress在这种情况下,不会费心其臭名昭著的“增量”算法或压缩(这些仅当网络上的客户端-服务器配置rsync涉及两台服务器时才起作用)。如果您可以在托管 S: 驱动器的服务器上rsync运行一个实例,那么效率可能会高得多。rsync

添加--dry-run以查看在不实际执行任何操作的情况下会发生什么。

相关内容