RSYNC : 排除多个文件

Siv*_*iva 2 rhel rsync

我想同步两个目录,但不包括几个文件。我尝试了下面的代码,但在排除中失败了。

FILES=abc.zip,hh.sh,Workarea/test/hi.jpg
rsync -av --exclude={$FILES} /home/test/ /home/test2
Run Code Online (Sandbox Code Playgroud)

为了验证它,我已执行为

# sh -x test.sh
+ FILES=abc.zip,hh.sh,Workarea/test/hi.jpg
+ rsync -av '--exclude={abc.zip,hh.sh,Workarea/test/hi.jpg}' /home/test/ /home/test2
Run Code Online (Sandbox Code Playgroud)

roa*_*ima 6

您不能将bash扩展{a,b,c}用作文字以外的任何东西(您不能放入a,b,c或什{a,b,c}至放入变量并直接扩展它。您可以使用,eval但这会带来许多意想不到的并发症,我真的不推荐它:

FILES=abc.zip,hh.sh,Workarea/test/hi.jpg
eval rsync -av --exclude={$FILES} /home/test/ /home/test2    # Don't do this!
Run Code Online (Sandbox Code Playgroud)

什么都好

这是一个更好的替代建议,它使用bash数组功能来保存一组排除项。然后我们rsync通过遍历它来构建命令行。

files=(abc.zip hh.sh Workarea/test/hi.jpg "Some file with a space in its name")

excludes=()
for f in "${files[@]}"
do
    excludes+=(--exclude "$f")
done
rsync -av "${excludes[@]}" /home/test/ /home/test2
Run Code Online (Sandbox Code Playgroud)