rsync排除目錄不起作用
我正在執行 Fedora 17 64 位,但
rsync --exclude=/home/ben/<dir>
沒有按預期工作。我正在嘗試將
rsync
我的主目錄指向拇指驅動器,但我想排除包含記憶體文件和建構文件的目錄。這是我正在使用的命令:rsync --exclude=/home/ben/build/ --exclude=/home/ben/.ccache -arv /home/ben home-ben/
但是,來自
~/build
和的內容~/.ccache
正在被 複製rsync
。我究竟做錯了什麼?
rsync
以前導開頭的全域過濾規則/
錨定到傳輸的根。引用手冊頁的“包含/排除模式規則”部分:如果模式以 / 開頭,則將其錨定到文件層次結構中的特定位置,否則將與路徑名的末尾匹配。這類似於正則表達式中的前導 ^。因此,“/foo”將在“傳輸的根”(對於全域規則)或合併文件的目錄(對於每個目錄規則)中匹配名稱“foo”。
在您的命令 (
rsync ... -arv /home/ben home-ben/
) 中,文件/home/ben/foo
將被傳輸到home-ben/ben/foo
. 轉移的根是home-ben
,正確的過濾路徑是/ben/foo
。因此,
- 匹配
/home/ben/.ccache
你需要一個過濾器路徑/ben/.ccache
- 匹配
/home/ben/build/
你需要一個過濾器路徑/ben/build/
更詳細的解釋可以在
rsync(1)
手冊頁的“ANCHORING INCLUDE/EXCLUDE PATTERNS”部分找到。請注意,簡單地省略前導
/
不一定是您想要的。再次引用同一手冊頁部分:不合格的“foo”將匹配樹中任何位置的“foo”名稱,因為該算法是自上而下遞歸應用的;它的行為就像每個路徑組件在文件名的末尾都有一個轉折。即使是未錨定的“sub/foo”也會匹配層次結構中在名為“sub”的目錄中找到“foo”的任何點。有關如何指定與傳輸根匹配的模式的完整討論,請參閱錨定包含/排除模式部分。
因此,過濾器模式
build/
將匹配任何地方的建構目錄/home/ben
,甚至/home/ben/many/sub/directories/build/
.