如何排除通配符目录但使用rdiff-backup包含通配符文件?

时间:2014-10-10 06:20:36

标签: rsync glob rdiff-backup

我正在使用rdiff-backup。真的很棒的简单强大的备份工具。但是我正在使用通配符的glob模式。我有这个目录结构:

/data/aaa/cache
/data/bbb/cache
/data/ccc/cache
etc....

在每个缓存目录中都有原始文件和缓存文件。原始文件的名称仅为1.jpg2.png3.gif,依此类推。缓存文件的一些字符串附加到原始文件名。

所以我想备份所有/ data / * / cache目录,但只包含原始文件,而不是缓存文件。

我正在使用此命令:
rdiff-backup --exclude **/cache --include **/cache/+([0-9]).+([a-z]) /data /backup

但是rdiff-backup返回了这个并且我输了:

Found interrupted initial backup. Removing...
Fatal Error: Last selection expression:
    Command-line include glob: **/cache/+([0-9]).+([a-z])
only specifies that files be included.  Because the default is to
include all files, the expression is redundant.  Exiting because this
probably isn't what you meant.

2 个答案:

答案 0 :(得分:2)

您可能需要执行两个步骤:

  1. 创建要排除的所有文件的列表,例如找到。 -name“** / cache”> excludes.lst
  2. 将列表与--exclude-filelist excludes.lst
  3. 一起使用

    通过这种方式,您可以避免使用glob选项进行战斗,并且可以完全控制您的排除

答案 1 :(得分:1)

来自http://rdiff-backup.nongnu.org/rdiff-backup.1.html

   A given file is excluded by the file selection system exactly
   when the first matching file selection condition
   specifies that the file be excluded; otherwise the file is included.

...

   For instance,

          rdiff-backup --include /usr --exclude /usr /usr /backup

   is exactly the same as

          rdiff-backup /usr /backup

   because  the  include  and  exclude  directives  match exactly the same
   files, and the --include comes first, giving it precedence.

因此,在您的情况下,它会抱怨最终--include,因为如果文件到达那里(即它不与之前的--exclude匹配),则无论是它不匹配--include。这就是错误信息试图说的内容。

至于如何实现目标......

假设您确实要排除表单的路径:/data/*/cache/[0-9]*.[a-z][a-z][a-z]?*,请指定:

rdiff-backup --exclude '/data/*/cache/[0-9]*.[a-z][a-z][a-z]?*' --exclude '*' /data /backup

这应该有用(我还没有测试过)。