rsync 排除缓存目录

rsync excluding cache directories

我使用 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

谁能告诉我排除任何文件的正确语法,在哪个路径中有 Cache 或 cache 的变体?

我相信你想要:

set -B - brace expansion mode (possibly optional)

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

请参阅 YoLinux,然后搜索 INCLUDE/EXCLUDE PATTERN RULES。相关信息是:

use '**' to match anything, including slashes.

额外信息

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

  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}'