我使用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的变体吗?
答案 0 :(得分:1)
我相信你想要
set -B
-大括号扩展模式(可能是可选的)
rsync -va --delete --exclude={**/Cache*,**/cache*} /var/www/ $MYEXDISK/www
请参见YoLinux,然后寻找INCLUDE/EXCLUDE PATTERN RULES
。相关信息是:
使用'**'匹配任何内容,包括斜杠。
{...,...,...}
被称为大括号扩展。
它有非常具体的规则。
echo --exclude={foo,bar}
=> --exclude=foo --exclude=bar
echo --exclude={foo, bar}
=> --exclude={foo, bar}
echo --exclude={foo}
=> --exclude={foo}
echo --exclude=\'{foo,bar}\'
=> --exclude='foo' --exclude='bar'
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}'