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
看看我做了什么。、、、、目录中应该有文件albackup
、ahbackup
、。我们将把和目录复制到目标:blbackup
bhbackup
AL
AH
BL
BH
AL
AH
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
以查看在不实际执行任何操作的情况下会发生什么。