如何仅在目标目录存在时告诉rsync运行?

时间:2009-01-04 14:52:20

标签: bash rsync

我有这个bash脚本将我的备份运行到外部硬盘驱动器...只有安装了该驱动器(OS X):

DIR=/Volumes/External; 
if [ -e $DIR ]; 
then rsync -av ~/dir_to_backup $DIR; 
else echo "$DIR does not exist"; 
fi

这有效,但我感觉我误读了rsync手册页。如果顶级目标目录不存在,是否有内置rsync选项来中止运行?如果没有测试/ Volumes / External的存在,如果目录尚未安装,则该目录将被创建。

3 个答案:

答案 0 :(得分:3)

这两个标志看起来就像你要找的那样:

--existing, --ignore-non-existing

从手册页:

  

- 现有的, - 不存在的 - 不存在的           这告诉rsync跳过创建目标上尚不存在的文件(包括目录)。如果将此选项与--ignore-existing选项结合使用,则不会更新任何文件(如果您只想删除无关文件,这将非常有用)。

答案 1 :(得分:3)

AFAIK没有,但您可以使用尾部斜线模拟行为:

rsync -av dir_to_backup /Volumes/External/;

如果目录不存在(可能需要也可能不需要),它将以错误退出。

此外,您始终可以优化if:

test -e $DIR && rsync -av ...

答案 2 :(得分:1)

不,就手册页而言,似乎没有任何此类选项。