[英]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
是指向哪個/
是錨定的)。
這就是為什么如果要從備份中排除特定路徑 ,仍需要錨定初始斜杠。 這可能看起來像一個小細節,它會更加具體你的排除模式(例如Pictures
與home/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.