簡體   English   中英

無法獲取rsync排除選項以排除dir

[英]Cannot get rsync exclude option to exclude dir

遇到rsync問題。 我正在使用rsync作為一個美化的cp命令。 我在腳本中有以下代碼。

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

我可以讓rsync排除任何隱藏文件。 因此'.*'我無法排除排除目錄。 我嘗試使用'='符號,用雙引號圍繞dir,用單引號。 任何幫助將不勝感激。 提前致謝。

實際上,這些都不是完全准確的。

Erik對此說得對

由於test / 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 ),但它可能只是來咬你的屁股。

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

這有效。 由於test/a是同步的基本目錄,因此a/開頭指定排除模式

如果這沒有幫助,請向我們展示真實路徑/排除。

使用-vn運行rsync將列出dirs / files - 該模式與rsync打印的格式匹配。

按照Erik的例子,你想要這樣做:

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

如果要指定絕對路徑,可以使用realpath將它們轉換為相對路徑:

--exclude="$(realpath --relative-to=$PWD /home/file)"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM