我想防止运行时源文件系统被暂时卸载的情况
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 匹配的情况下,管道传输速度会更快。