如何rsync多個來源資料夾

如何rsync多個來源資料夾

我想同步多個來源,我想知道實現這一目標的最佳方法。

例如

/etc/fstab
/home/user/download

我想到了 3 個解決方案:

  • 解決方案1

多次調用 rsync

rsync -a /etc/fstab bkp
rsync -a /home/user/download bkp

缺點:更難取得聚合統計數據

  • 解決方案2

建立一個tobackup包含符號連結的資料夾,並使用-L選項

sync -aL /home/user/tobackup bkp

缺點:要備份的內容不得包含符號鏈接

  • 解決方案3

將檔案移至備份並在原始位置建立符號鏈接

rsync -a /home/user/tobackup bkp

缺點:一些手動配置

您推薦哪一款?

有沒有更好的辦法 ?

答案1

您可以傳遞多個來源參數。

rsync -a /etc/fstab /home/user/download bkp

這會創建bkp/fstabbkp/download,就像您給出的單獨命令一樣。相反,可能需要保留源結構。為此,請使用/作為來源並使用包含-排除規則指定要複製的文件。有兩種方法可以做到這一點:

  • 當您想要複製整個目錄樹時,明確包含每個檔案以及通往該檔案的每個目錄元件,並/***在目錄末尾新增:

    rsync -a \
        --include=/etc --include=/etc/fstab \
        --include=/home --include=/home/user --include='/home/user/download/***' \
        --exclude='*' / bkp
    
  • /*/使用(以便 rsync 在尋找要複製的檔案時遍歷/etc)包含所有頂級目錄,使用(for )/home包含所有二級目錄,但刪除不複製任何檔案的目錄。這更方便,因為您不必明確列出父母。您甚至可以使用而不是計算等級數,但這在這裡是不切實際的,因為 rsync 會遍歷整個檔案系統來探索目錄,即使沒有任何包含規則可以匹配和之外的任何內容。/*/*//home/user--prune-empty-dirs --include='*/'/etc/home/user/download

    rsync -a --prune-empty-dirs \
        --include='/*/' --include='/*/*/' \
        --include=/etc/fstab \
        --include='/home/user/download/***' \
        --exclude='*' / bkp
    

答案2

我真的很喜歡吉爾斯的回答,但是,我想補充一點,在我看來,透過與該--relative選項結合傳遞多個來源參數,可以最好地滿足在保留目錄結構的同時同步多個資料夾的要求。

在這種情況下,我們可以有以下內容:

rsync -aR /etc/fstab /home/user/download bkp

這將導致bkp/etc/fstabbkp/home/user/download

最好的部分是(我相信從 rsync v.2.6.7 開始)我們可以本質上控制我們想要在目的地複製多少目錄結構。 (請參閱有關選項
的文檔--relative這裡

例如,如果我們這樣做

rsync -aR /home/./user1/download /home/./user2/download bkp

我們最終會得到bkp/user1/downloadbkp/user2/download

答案3

這也有效 - 大括號,包含逗號分隔的來源清單。

rsync -vap --progress --stats root@server:{/etc,/root/backups,/home/ultralazer} /mnt/bigdrive

與您使用 cp 和某些其他實用程式呼叫大括號 sytnax 時發生的情況有些相似:

cp -vr /etc /root/backups /home/{ultralazer,zerocool} /mnt/bigdrive

相關內容