Rsync

rsync :將符號連結複製為正常文件

  • November 14, 2021

我需要將一個包含各種文件的大目錄複製到一個已經有很多重要數據的驅動器上。

我希望能夠複製 munged 符號連結,但驅動器是 exfat 並且不支持符號連結。因為該文件已經有很多數據,所以我想避免必須傳輸這些數據才能將其格式化為支持符號連結的東西。

rsync 有沒有辦法讀取這樣的符號連結:

/etc/apache2/sites-enabled/mysite.conf -> ../sites-available/mysite.conf

並生成一個正常文件,如

<rsync-destination>/etc/apache2/sites-enabled/mysite.conf.rsync-munged

包含文本

../sites-available/mysite.conf

如果解決方案是內置於 rsync 或在 bash 管道中完成,或者至少是在任何 linux 上找到的基本工具的一部分,我更願意,但我願意接受其他提供 rsync 所做的 + 此功能的軟體

編輯:

我看到 rsync 不能做這樣的事情。我想我找到了一種手動完成的方法:

rsync 除符號連結之外的所有內容,然後單獨執行“查找”操作以辨識源中的所有符號連結,並使用 bash 腳本手動創建它們。

我必須手動從 stdio 中提取符號連結數據,但我不知道該怎麼做。ls -l 有更多的數據會妨礙

rsync 正常文件,然後單獨查找所有連結,將它們列出在一個文件中並一個一個創建所有連結文件

#!/bin/bash
$SRCDIR="/backup/";
$SRCSERVER="user@example.com";
$DEST=".";
rsync -rtpEv "$SRCSERVER:$SRCDEST" $DEST;
ssh SRCSERVER "stat -c %N \`find $SRCDIR -type l\` 2> /dev/null" > links;
$MUNGED = ".munged";

while read p; do                                                                                                                                                                                                     
   file=$(echo $p | awk -F ' ' '{print $1}' | sed "s/^\`/;s/'$//");                                                                                                                                                  
   dest=$(echo $p | awk -F ' ' '{print $3}' | sed "s/^\`//;s/'$//");                                                                                                                                                  
   echo $dest > "$file$MUNGED";
done < links;                                                                                                                                                                                      

(不確定我的 bash 語法,我基本上是手動執行的)

你想要的不是直接可能的:

  • 您不能將符號連結轉換為具有後綴名稱的文件,例如munged
  • --fake-super您可以將符號連結轉換為正常文件(

其他可能性

  • --munge-links選項將符號連結保留為符號連結,但修復了符號連結的值,使其在目標系統上無效。對於 exFAT 文件系統沒有用
  • 您可以使用--copy-links將符號連結擴展至實際文件。這可能不是您想要的,因為符號連結資訊失去並且在數據返回到源系統時無法重建

我能看到的唯一其他解決方案是讓您在目標系統上創建一個大文件,該文件可以掛載為本機 Linux 文件系統,例如ext4. 然後,您可以將備份發送到該文件系統,並從 exFAT 中有限集之外的額外功能中受益。

引用自:https://unix.stackexchange.com/questions/677051