以下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命令是否成功,如果是,则可以删除该文件夹。
答案 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