检查rsync命令是否成功运行

时间:2014-06-27 14:32:33

标签: linux bash shell rsync

以下bash脚本每小时执行一次文件夹的rsync:

#!/bin/bash
rsync -r -z -c /home/pi/queue root@server.mine.com:/home/foobar
rm -rf rm /home/pi/queue/*
echo "Done"

但我发现我的Pi与互联网断开连接,因此rsync失败了。所以它执行了以下命令,删除了该文件夹。 如何确定rsync命令是否成功,如果是,则可以删除该文件夹。

3 个答案:

答案 0 :(得分:30)

通常,任何Unix命令如果成功运行则返回0,而在其他情况下则返回非0。

查看man rsync可能与您的情况相关的退出代码,但我这样做:

#!/bin/bash
rsync -r -z -c /home/pi/queue root@server.mine.com:/home/foobar && rm -rf rm /home/pi/queue/* && echo "Done"

只有在一切顺利的情况下,才会进行反应和回声。

其他方法是使用$?变量,它始终是上一个命令的返回码:

#!/bin/bash
rsync -r -z -c /home/pi/queue root@server.mine.com:/home/foobar
if [ "$?" -eq "0" ]
then
  rm -rf rm /home/pi/queue/*
  echo "Done"
else
  echo "Error while running rsync"
fi

参见 man rsync 退出价值

部分

答案 1 :(得分:6)

您需要检查rsync的退出值

#!/bin/bash
rsync -r -z -c /home/pi/queue root@server.mine.com:/home/foobar
if [[ $? -gt 0 ]] 
then
   # take failure action here
else
   rm -rf rm /home/pi/queue/*
   echo "Done"
fi

此处的结果代码集: http://linux.die.net/man/1/rsync

答案 2 :(得分:3)

老问题,但我很惊讶没有人给出简单的答案:
使用 - remove-source-files rsync选项。 我认为这正是你所需要的。

从手册页:

--remove-source-files   sender removes synchronized files (non-dir)

仅删除rsync已成功传输的文件。

当不熟悉rsync时,很容易对--delete选项和--remove-source-files选项感到困惑。 --delete选项删除目标端的文件。更多信息: https://superuser.com/questions/156664/what-are-the-differences-between-the-rsync-delete-options