Rsync 完美复制:软链接变成..dir

Rsync 完美复制:软链接变成..dir

我从一个已安装的磁盘“克隆”到远程安装的另一磁盘。我将它们称为本地和远程。本地是slackware,远程ubuntu在本地

df -h /mnt/
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/fedora-root   49G  4.3G   43G  10% /mnt

在远程

 df -h /media/ubuntu/1c34a414-9fa2-4bfe-a57c-7f82f1b31b29
Filesystem      Size  Used Avail Use% Mounted on
/dev/mmcblk1p2   57G  7.2G   47G  14% /media/ubuntu/1c34a414-9fa2-4bfe-a57c-7f82f1b31b29

从本地使用此命令后,我发现 rsync 未正确完成操作

cd /mnt
 for i in * ;do rsync -avP --delete --ignore-errors $i/ 192.168.0.75:/media/ubuntu/1c34a414-9fa2-4bfe-a57c-7f82f1b31b29/$i; done

我在本地看到例如

file bin
bin: symbolic link to usr/bin

并在远程..

file /media/ubuntu/1c34a414-9fa2-4bfe-a57c-7f82f1b31b29/bin/
/media/ubuntu/1c34a414-9fa2-4bfe-a57c-7f82f1b31b29/bin/: directory

我希望 bin 在远程销毁,并且它必须成为(与本地一样)符号链接 rsync 的哪个选项?使用:

rsync -avPl rsync -rvPl

不起作用

答案1

-l( )选项由( )-links隐含,但您还需要 -K ( ) 以便允许目标目录为符号链接。您可能会发现您还需要纠正现有的结构。-a--archive--keep-dirlinks--delete-before

rsync -avKP --delete --ignore-errors src/ 192.168.0.75:dst/

更仔细地查看您的原始代码,您正在迭代我现在看到的服务器的顶层,包括/bin/usr。在本例中/bin,是 的符号链接/usr/bin,但您的代码将其传递给rsyncwith $i/,这相当于/bin/。因此,rsync永远不要将其视为符号链接,因为您$i/已经取消引用它。

删除for循环并让其rsync处理完整目录树本身将允许它查看顶级符号链接并正确传输它。

答案2

我找到了一个很好的“解决方法”

而不是做了

cd /mnt
 for i in * ;do rsync -avXHhP --delete --ignore-errors $i/ 192.168.0.75:/media/ubuntu/1c34a414-9fa2-4bfe-a57c-7f82f1b31b29/$i; done

我愿意

rsync --avXHhP --delete --ignore-errors /mnt/ 192.168.0.75:/media/ubuntu/1c34a414-9fa2-4bfe-a57c-7f82f1b31b29 ; done

并且工作,即使在符号链接上,目录也是相同的

编辑:我使用 -avXHhP 进行更正,这对于备份可启动更有利

相关内容