另一種解決方案在這裏不起作用。
可靠的方式
你別無選擇,只能手動下降爲您的子目錄,每個級別。包含不需要的文件沒有風險,因爲rsync不包括包含目錄的文件。
1)創建一個包含過濾器文件,例如 「include_filter.txt」:
+ /specs/
+ /specs/install/
+ /specs/install/project1/***
- /specs/**
2)運行它:
rsync -avz --delete --include-from=include_filter.txt \
/srv/http/projects/project/ \
[email protected]:~/projects/project
- 不要忘了啓動斜槓「/ 「,否則你可能會匹配名爲」**/specs/install/project1 /「的子目錄。
- 通過選擇包含類型過濾器(--include-from = FILE),啓動加「+」符號實際上是可選的,因爲這是沒有符號的默認操作。 (默認情況下,您可以使用--exclude-from = FILE來設置相反的「 - 」。)
- 的雙星 「**」 是指 「任何路徑」
- 的三連星 「***」 是指 「任何路徑,包括這個非常目錄」
簡單的方法
你可以開始你的過濾器「* /」,允許rsync下降你所有的子級別。這很方便,但是:
- 所有目錄都將被包括在內,儘管爲空。這可以通過rysnc選項-m修復,但是所有空的目錄都會被跳過。
1)創建一個包含過濾器文件,例如 「include_filter.txt」:
+ /**/
+ /specs/install/project1/***
- /specs/**
2)運行它:
rsync -avzm --delete --include-from=include_filter.txt \
/srv/http/projects/project/ \
[email protected]:~/projects/project
注意添加的選項-m。
剛剛在linuxquestions.org上找到了一個類似的問題,可能有所幫助:http://www.linuxquestions.org/questions/linux-software-2/rsync-include-exclude-problems-636504/ – Chris
謝謝,解決了它!有時Rsync確實有一個奇怪的邏輯。 – user1036651
Duplicates http://stackoverflow.com/questions/7960669/with-rsync-how-do-includes-and-excludes-combine/7961687#7961687 –