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
作为/
锚定的点).
这就是为什么如果要从备份中排除特定路径,仍需要锚定初始斜杠.这可能看起来像一个小细节,因此你的排除模式会变得越具体(例如Pictures
vs. 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
Run Code Online (Sandbox Code Playgroud)
这有效.与test/a
同步的基本目录一样,排除模式通过以.开头指定a/
如果这没有帮助,请向我们展示真实路径/排除.
使用-vn运行rsync将列出dirs/files - 该模式与rsync打印的格式匹配.