我想同步两个目录,但不包括几个文件。我尝试了下面的代码,但在排除中失败了。
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)
您不能将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)