Rsync

Rsync:僅包含特定的子目錄(使用外部包含文件)

  • January 26, 2022

我正在使用帶有include-from="external file"選項的 rsync。除此之外,我的問題幾乎與這個相同。

我想備份一個非常具體的子文件夾,而通常不備份任何隱藏文件夾。我設法做到這一點的唯一方法是煞費苦心地這樣做:

+ home/*/.config/libreoffice/
+ home/*/.config/libreoffice/4/
+ home/*/.config/libreoffice/4/user/
+ home/*/.config/libreoffice/4/user/registrymodifications.xcu

# hide the rest ( .local, .wine, most of .config ...)
- home/*/.*/

如果沒有前 3 行,registrymodifications.xcu將被排除在外,因為它的高級目錄是不匹配的,直到它們被最後一行“擊中”……所以根據我的經驗,我必須將它們全部列入白名單,一塊一塊。

有沒有更痛苦的方法來做到這一點?(我仍然希望將所有備份規則保存在一個外部文件中……)

在命令行上,我會這樣做:

rsync -ai \
   --prune-empty-dirs \
   --include='*/' \
   --include='home/*/.config/libreoffice/4/user/registrymodifications.xcu/***'
   --exclude='*' \
   "$source" "$destination"

這包括所有目錄、registrymodifications.xcu子目錄及其下的所有文件,遞歸地,但隨後排除了其他規則未明確包含的所有內容。它還使用--prune-empty-dirs( -m),這意味著不會在目標上創建空目錄。

效果是只有匹配第二個包含規則的文件和目錄才會真正被傳輸。

或者,作為過濾器文件:

+ */
+ home/*/.config/libreoffice/4/user/registrymodifications.xcu/***
- *

…您將用作

rsync -ai \
   --prune-empty-dirs \
   --include-from=patterns \
   "$source" "$destination"

需要注意的是,由於該選項,不會在目標上創建與第二個包含規則匹配的空目錄。--prune-empty-dirs

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