无法获取rsync排除选项以排除dir

Jam*_* P. 11 unix linux scripting rsync batch-file

遇到rsync问题.我正在使用rsync作为一个美化的cp命令.我在脚本中有以下代码.

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

我可以让rsync排除任何隐藏文件.因此,'.*' 我无法排除排除目录.我试过使用一个'='标志,用双引号围绕dir,用单引号.任何帮助将不胜感激.提前致谢.

Dan*_*uus 16

实际上,这些都不是完全准确的.

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作为/锚定的点).

这就是为什么如果要从备份中排除特定路径,仍需要锚定初始斜杠.这可能看起来像一个小细节,因此你的排除模式会变得越具体(例如Picturesvs. home/daniel/Pictures),但它可能只会在你的屁股中咬你.


Eri*_*rik 9

mkdir -p test/a/b/c/d/e
mkdir -p test/dest
rsync -nvraL test/a test/dest --exclude=a/b/c/d 
Run Code Online (Sandbox Code Playgroud)

这有效.与test/a同步的基本目录一样,排除模式通过以.开头指定a/

如果这没有帮助,请向我们展示真实路径/排除.

使用-vn运行rsync将列出dirs/files - 该模式与rsync打印的格式匹配.