何かの状態を確認するには、スクリプトを作成する必要があります。ステータスが「コピー中」の場合は終了します(またはもう少し詳しく説明したい場合は60分後にもう一度やり直してください)、何も返されない場合(すべてが同期されているという2番目のコマンドに従って)、別の操作を実行してください。
コピーする場合は終了または再試行してください。 60 NULLの場合は追加の操作を実行します。
root@box:~$ ./prog status
PyDsk /home In Sync
PyDsk /trax Copying 85% complete
PyDsk /trax2 In Sync
PyDsk /trax3 Copying 97% complete
PyDsk /traxnl Copying 50% complete
PyDsk /traxnl2 Copying 69% complete
PyDsk /traxnl3 Copying 56% complete
PyDsk /traxnl4 In Sync
PyDsk /traxnv In Sync
PyDsk /traxnv2 In Sync
PyDsk /ulog In Sync
root@box:~$ ./prog status | grep complete | awk '{print $3;}'
Copying
Copying
Copying
Copying
Copying
編集します。私はこれを達成する別の方法で開いています。私は仕事を始める方法を受け入れませんでした。それは私が考えることができる唯一の方法でした。もっとエレガントなものがあれば受け入れます:)
答え1
次のように簡単な操作を実行できます。
[[ -n $(./prog status | awk '/complete/ {print $3}') ]] && echo "foo"
コマンド出力が空の場合、この行は単に「foo」をエコーします。
答え2
誰かがよりエレガントな解決策を出す可能性が高いですが、これは私のものです。
#!/bin/bash
count=`./prog status | grep complete | awk '{print $3}' | wc -l`
zero="0"
if [ "$count" -eq "$zero" ]
then echo "all done."
else echo "wait a little more and try again."
fi
count 変数はコピー操作の数です。 countが0の場合(つまり、進行中のコピージョブがないことを意味します)、スクリプトはすべて完了したと印刷し、それ以外の場合はもう少し待ってからやり直してください。独自のコマンドを使用して、echoを含む行を変更できます。
答え3
完了はコピー状態でのみ発生するようです。したがって、どちらを選択するかは問題ではありません。
while ( ./prog status|grep -qw complete 2>/dev/null )
do
echo Waiting one hour for copy to complete.
sleep 3600
# or exit if you like to
done
# Synced, do whatever is to be done