rsync不包括缓存目录

时间:2017-07-16 17:24:37

标签: rsync

我使用rsync作为外部硬盘的备份工具。但是我想通过不复制几个程序的无用缓存文件来节省时间。我想通过省略树中某个名为Cache,cache或cache2的文件夹中的每个文件来实现这一点。事实上,任何名称的变体都暗示了完整路径中的缓存文件夹。

他们可以在以下路径中:

.cache/google-chrome/Default/Cache/1e1cb5d5222c54c4_0
.cache/mozilla/firefox/smifthya.default/cache2/entries/15444D7EEEAF61418021BC35F25FD997974458B5

所以我尝试排除那些缓存文件被以下行同步到目前为止还没有成功。

到目前为止我尝试了什么:

rsync -va --delete --exclude={*Cache*, *cache*} /var/www/ $MYEXDISK/www

rsync -va --delete --exclude '*cache*' /var/www/ $MYEXDISK/www

rsync -va --delete --exclude 'cache*' /var/www/ $MYEXDISK/www

rsync -va --delete --exclude={Cache*, cache*} /var/www/ $MYEXDISK/www

有人能告诉我corect语法来排除任何文件,其中的路径有Cache或cache的变体吗?

1 个答案:

答案 0 :(得分:1)

我相信你想要

  

set -B-大括号扩展模式(可能是可选的

     

rsync -va --delete --exclude={**/Cache*,**/cache*} /var/www/ $MYEXDISK/www

请参见YoLinux,然后寻找INCLUDE/EXCLUDE PATTERN RULES。相关信息是:

  

使用'**'匹配任何内容,包括斜杠。

其他信息

{...,...,...}被称为大括号扩展。 它有非常具体的规则。

  1. 不允许使用空格。
    • 看到(好)echo --exclude={foo,bar} => --exclude=foo --exclude=bar
    • 与(不好)echo --exclude={foo, bar} => --exclude={foo, bar}
  2. 单元素扩展将不起作用。
    • 看到(坏)echo --exclude={foo} => --exclude={foo}
  3. 有时引用结果会有所帮助,有时会破坏事情。尝试两者。
    • 看到(好)echo --exclude=\'{foo,bar}\' => --exclude='foo' --exclude='bar'
  4. 如果文件名中包含空格,则需要在字符串中加引号
    • 看到(好)echo --exclude=\'{"foo bar",baz}\' => --exclude='foo bar' --exclude='baz'
    • 与(不好)echo --exclude={'foo bar',baz} => --exclude=foo bar --exclude=baz
    • 与(不好)echo --exclude=\'{foo bar,baz}\' => --exclude='{foo bar,baz}'