Files

rsync 命令備份主目錄和某些目錄中的文件並刪除

  • April 25, 2017

我嘗試準備 rsync 命令,該命令將: 1. 備份目錄中的所有文件,但不備份嵌套文件 2. 備份某些目錄 3. 在源目錄中刪除目標目錄中的文件時刪除它們

rsync -vtr --delete --exclude='*/' --include='includes/*' --include='js/*' --include='css/*' /home/gameboy/abc/* /home/gameboy/PartialMirror/abc/

但這只會復製文件,不會複製任何文件夾,也不會刪除。你能幫我改進一下命令嗎?

嚴格來說,以下可以解釋為相互矛盾的目標。

  1. 備份目錄中的所有文件,但不備份嵌套文件,即 –exclude=’*/'
  2. 備份某些目錄 - 即包括一些嵌套文件

請參閱下文,了解為什麼您的論點沒有按您的預期工作。在下文中,請參閱可能適合您目的的合適替代方案(它滿足 #1、#3 和 #2 的版本)。

為什麼您的命令不起作用:

rsync 處理你的命令行參數的方式,下面的參數相當於說 –exclude=’*/'

–exclude=’ /’ –include=‘desired_subfolder/ '

即,您的命令排除了所有嵌套文件,因此也排除了所需子文件夾中的文件。

此問題會影響您的第二次觀察,即在源中刪除的目標中的文件不會被刪除。實際上,您的命令在刪除頂級文件時效果很好。但是,低於上一級的文件不會被刪除,因為它們已經被排除在外。它有助於記住 –delete 指的是 –delete-during,而不是 –delete-before。

滿足 #1、#3 和 #2 版本的解決方案: 以下解決方案可能適合您的需求

rsync -avz --delete --include='includes/*' --include='js/*' --include='css/*' --exclude='*/*' /home/gameboy/abc/ /home/gameboy/PartialMirror/abc/

它滿足以下條件: 1. 備份深度為 1 的所有文件和目錄,但不備份嵌套文件。2. 備份所需的文件夾 3. 刪除目標中不在源中的文件。

另一個比較麻煩的選擇如下

 rsync -vlptgoDd --delete src/ dest/

這滿足#1 和#3,但避免了所有嵌套文件(請記住,文件夾也是 *nix 中的文件)。我避免給出 -r 選項,所以它不是遞歸的。刪除深度 1 的作品和文件夾被複製。除了保留時間戳 (-t) 之外,我還包括了存檔複製的其他典型選項。

在不同文件夾中獲得不同 rsync 行為的更標準方法是通過層次結構以每個目錄的方式散佈過濾規則;即創建特定於需要獨特行為的每個文件夾的 .rsync-filter 文件。例如

  rsync -avF src/ dest/

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