帮助(有条件?)rsync 排除

帮助(有条件?)rsync 排除

我想从 rsync 中排除 /bar/,但仅限于文件夹 /foo/ 中。

如果我使用 --exclude '/foo/bar/' ,它只会在 foos 父目录上运行时 rsync 才会起作用,但在我们的设置中,我无法这样做。

如果我使用 --exclude '/bar/',它将排除所有 /bar/ 子目录,例如包括 /fee/bar/。

我要做的只是在目标目录为 /foo/ 时排除 /bar/

这在 rsync 中可以实现吗?

或者我是否需要有一些包装脚本来插入排除规则,其目标是/foo/?

答案1

rsync(1)手册页“INCLUDE/EXCLUDE PATTERN RULES”中:

   o      if the pattern starts with a / then it is anchored to a particu-
          lar spot in the hierarchy of  files,  otherwise  it  is  matched
          against the end of the pathname.  This is similar to a leading ^
          in regular expressions.  Thus "/foo" would match a name of "foo"
          at  either  the "root of the transfer" (for a global rule) or in
          the merge-file’s  directory  (for  a  per-directory  rule).

答案2

请参阅以下代码片段,foo/bad 和 bar/bad 被创建为包含某些文件的目录,如果您简单地使用“*foo/bad”排除它们,那么 foo/bad 中包含的每个“bad”(文件或目录)都将被忽略。

e@lap:/tmp$ mkdir -p source/foo/bad source/bar/bad target
e@lap:/tmp$ touch source/foo/bad/a.txt source/bar/bad/a.txt
e@lap:/tmp$ rsync -vr --exclude "*/foo/bad" source target/
sending incremental file list
source/
source/bar/
source/bar/bad/
source/bar/bad/a.txt
source/foo/

sent 153 bytes  received 47 bytes  400.00 bytes/sec
total size is 0  speedup is 0.00

相关内容