2011-03-17 111 views
9

存在rsync問題。我使用rsync作爲榮耀的cp命令。我在腳本中有以下代碼。無法獲取rsync排除選項以排除目錄

rsync -aL --exclude /path/to/exclude/ --exclude='.*' /source/ /destination

我可以得到的rsync排除任何隱藏的文件。因此'.*'我無法得到排除目錄排除。我試過用雙引號括起來,用單引號括起'='。任何幫助將不勝感激。提前致謝。

+0

爲清楚起見,我已經試過 '--exclude = /路徑/要/排除/' '--exclude /路徑/到/排除/' '--exclude「/路徑/到/排除/'' '--exclude 「/路徑/到/排除/」' '--exclude = 「/路徑/到/排除/」' '--exclude ='/ path/to/exclude /'' – 2011-03-17 18:35:05

+0

嘗試'--exclude'/ path/to/exclude''沒有尾隨/,rsync與它有一些行爲在某些情況下。 Otherwize,你也可以嘗試'--exclude'/ path/to/exclude/*'' – Aif 2011-03-17 18:43:27

+0

謝謝Aif,我已經試過沒有尾隨/。我忘了將它添加到我的列表中。它的奇怪,我必須失去一些東西。 – 2011-03-17 18:45:53

回答

10
mkdir -p test/a/b/c/d/e 
mkdir -p test/dest 
rsync -nvraL test/a test/dest --exclude=a/b/c/d 

This works。由於test/a是同步的基本目錄中,排除模式是通過與a/

開始指定我們展示真實的路徑/排除如果這沒有幫助。

使用-vn運行rsync將列出目錄/文件 - 將模式與rsync打印的格式進行匹配。

+0

謝謝Erik的回覆。你在錢上。奇怪的是,排除選項不採用絕對路徑。 – 2011-03-17 18:53:47

+0

@詹姆斯P. rsync過濾器並不是很直觀......但是,他們的工作,你只需閱讀聯機幫助頁中的「過濾規則」很多次:) – Erik 2011-03-17 18:56:18

2

繼埃裏克的例子中,你想這樣做:

rsync -nvraL test/a/ test/dest --exclude=/b/c/d 
11

其實,這些都不是完全準確的。

埃裏克是中途說得

作爲試驗/ a是通過用/

開始從,指定的排除模式同步的基本目錄,該排除確實模式的test/a(即模式/some/path綁定到test/a/some/path),但這不是整個故事。

從手冊頁:

如果模式與/然後將它錨定在文件的層次結構的特定點開始,否則是對路徑名的末尾匹配。這與正則表達式中的前導^類似。因此,「/ foo」將匹配 「傳輸根目錄」(全局規則)或合併文件目錄(對於每個目錄規則)中名爲「foo」的文件。

我們可以忽略per-directory位,因爲它不適用於我們這裏。

因此,rsync -nvraL test/a test/dest --exclude=a/b/c/d將絕對排除test/a/b/c/d(和子女),但它也將排除test/a/other/place/a/b/c/d

rsync -nvraL test/a test/dest --exclude=/b/c/d,另一方面,將排除test/a/b/c/d(兒童)(test/a作爲點到/錨定)。

這就是爲什麼如果您想排除特定路徑被備份的原因,您仍需要錨定初始斜線。這可能看起來像一個小細節,它會是這樣,你的排除模式變得更具體(例如Pictureshome/daniel/Pictures),但它可能只是來咬你屁股。