仅当目标目录存在时才运行 rsync 吗?

仅当目标目录存在时才运行 rsync 吗?

我有一个辅助备份驱动器,通常存储在异地,但有时会安装。我想在 crontab 中添加一些内容,如果已安装,它会自动将我的备份驱动器克隆到辅助备份。我知道我可以做这样的事情:

if [ -d $target_dir ]; then rsync -a --delete $src_dir $target_dir; fi

但我想知道是否有一种方法可以向 rsync 询问同样的事情,而不需要求助于 shell 脚本?鉴于它有 6.02*10^23 命令行选项,你会这么认为......

答案1

这是一个可能会起作用的技巧...在我的示例中,如果 $target_dir 位于“远程”计算机(本地主机)上,则 rsync 将成功,否则将失败(通过不运行远程 rsync)。

IE

src_dir=/etc;target_dir=/test/a;rsync -azp --rsync-path="[[ -d $target_dir ]] && rsync" $src_dir localhost:$target_dir

如果远程目录不存在,则失败结果代码应为 12 ...因为由于以下失败,它从未真正运行远程 rsync"[[ -d $target_dir ]]"

12 Error in rsync protocol data stream

需要注意的是,您必须使用 TCP 套接字才能使其工作,这可能会更慢。

另一种选择是via /etc/crontab(不需要脚本),类似于..

50 23 * * * root (src_dir="/test/src_dir"; target_dir="/test/target_dir"; [ -d $src_dir ] && [ -d $target_dir ] && rsync -a -v --delete ${src_dir}/ ${target_dir}/) &>> /var/log/test.log

相关内容