【问题标题】:How do I tell rsync to run only if the destination directory exists?我如何告诉 rsync 仅在目标目录存在时才运行?
【发布时间】:2009-01-04 14:52:20
【问题描述】:

我有这个 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 是否存在的情况下,如果目录尚未挂载,则会使用该名称创建目录。

【问题讨论】:

    标签: bash rsync


    【解决方案1】:

    AFAIK 不,但你可以用斜杠模拟行为:

    rsync -av dir_to_backup /Volumes/External/;

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

    此外,您可以随时优化 if:

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

    【讨论】:

    • 我不认为第一个陈述是正确的。无论尾部斜杠如何,都会创建该目录。我喜欢存在性测试的 shell 优化,但如果目录不存在,我确实想要一些错误输出,所以我可能会保持详细。
    【解决方案2】:

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

    --existing, --ignore-non-existing
    

    来自手册页:

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

    【讨论】:

    • 使用--existing,他在源层次结构中的新目录将永远不会在备份驱动器上创建...
    • 是的,这些是我似乎无法按照我想要的方式工作的选项。即使由于目标目录不存在而中止运行,也会创建目标目录(尽管未复制树)。
    【解决方案3】:

    不,据我从手册页中看到,似乎没有任何此类选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多