如果源目录为空,是否可以告诉 rsync 中止?

如果源目录为空,是否可以告诉 rsync 中止?

我想防止运行时源文件系统被暂时卸载的情况

rsync -av --delete $source $target

似乎如果我可以告诉rsync拒绝处理空的源目录,那就可以了。不过,我没有看到任何明显的标志或标志组合可以做到这一点。请注意,一般来说,源是远程的,因此很难判断它是否为空。

如何处理这个问题?

答案1

假设您在远程主机上有一个登录 shell(并且远程 shell 是bash),请使用 shell 内置功能compgen来测试源目录是否为空。

首先,确保您的$source变量不包含主机名。相反,让主机名为$remote_host

if ssh $remote_host "compgen -G $source/*" | grep -q '^'
then
    rsync -av --delete $remote_host:$source $target
else
    printf "Directory %s is empty on host %s\n" "$source" "$remote_host"
fi

也许可以简单地这样做compgen -G $source/* > /dev/null,但是由于一次匹配足以证明非空,因此我希望grep -q在可能有大量条目与 glob 匹配的情况下,管道传输速度会更快。

相关内容