Rsync
Rsync:僅包含特定的子目錄(使用外部包含文件)
我正在使用帶有
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