rsync 不包括缓存目录

Cal*_*ane 4 rsync

我使用 rsync 作为外部硬盘的备份工具。不过,我想通过不复制多个程序的无用缓存文件来节省时间。我想通过省略位于树中某个名为 Cache、cache 或 cache2 的文件夹下的每个文件来实现此目的。实际上,暗示完整路径中的缓存文件夹的名称的任何变体。

它们可以位于以下路径中:

.cache/google-chrome/Default/Cache/1e1cb5d5222c54c4_0
.cache/mozilla/firefox/smifthya.default/cache2/entries/15444D7EEEAF61418021BC35F25FD997974458B5
Run Code Online (Sandbox Code Playgroud)

因此,我尝试通过以下几行排除这些缓存文件,到目前为止尚未成功。

到目前为止我尝试过的:

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
Run Code Online (Sandbox Code Playgroud)

谁能告诉我排除任何文件的正确语法,在该文件的路径中存在缓存或缓存的变体?

Mar*_* B. 5

我相信你想要:

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