web-dev-qa-db-ja.com

rsyncコマンドが正常に実行されたかどうかを確認する

次のbashスクリプトは、フォルダーのrsyncを1時間ごとに実行しています。

#!/bin/bash
rsync -r -z -c /home/pi/queue [email protected]:/home/foobar
rm -rf rm /home/pi/queue/*
echo "Done"

しかし、Piがインターネットから切断されていることがわかり、rsyncが失敗しました。そのため、次のコマンドを実行して、フォルダーを削除しました。 rsync-commandが成功したかどうかを判断する方法、成功した場合は、フォルダーが削除されることがあります。

11
user1670816

通常、Unixコマンドは、正常に実行された場合は0を返し、その他の場合は0以外を返します。

状況に関連する可能性のある終了コードについては、man rsyncを参照してください。ただし、次のようにします。

#!/bin/bash
rsync -r -z -c /home/pi/queue [email protected]:/home/foobar && rm -rf rm /home/pi/queue/* && echo "Done"

すべてがうまくいった場合にのみ、rmとechoが実行されます。

それを行う他の方法は$を使用することでしょうか?常に前のコマンドの戻りコードである変数:

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

man rsyncのセクションEXIT VALUESを参照してください

30

rsyncの終了値を確認する必要があります

#!/bin/bash
rsync -r -z -c /home/pi/queue [email protected]:/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

6
dethorpe

古い質問ですが、誰も簡単な答えを出していないことに驚いています。
-remove-source-filesrsyncオプションを使用します。
それはまさにあなたが必要としていることだと思います。

Manページから:

--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

4
gaoithe