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.
额外信息
{...,...,...}
称为大括号扩展。
它有非常具体的规则。
- 不允许有空格。
- 见(好)
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}'
我使用 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.
额外信息
{...,...,...}
称为大括号扩展。
它有非常具体的规则。
- 不允许有空格。
- 见(好)
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}'
- 见(好)