rsync出力を「dialog --gauge」コマンドに入力できる方法でフィルタリング/リダイレクトする方法を探しているので、ファイル同期中に見栄えの良いプログレスバーを取得できます。現在、プロンプトで直接テストしているだけですが、(bash)シェルスクリプトでこれを行う予定です。
私はインターネットを見回し、細かく見つけましたが、それを機能させるための何かがまだありません
(免責事項:これは完全に間違ったアプローチである可能性があり、リダイレクト/パイピングの怪物です)
私が現在まとめているもの:
rsync -avz --progress -e "ssh" user@server:/home/user/data/ /home/user/data | awk -f /home/user/rsync.awk | sed 's/\([0-9]*\).*/\1/' | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70
最初に--progressオプションを指定した実際のrsyncコマンドがありますrsyncからの出力はawkにパイプされ、以下のawkフィルターを使用します。
{
if (index($0, "to-check=") > 0)
{
split($0, pieces, "to-check=")
split(pieces[2], term, ")");
split(term[1], division, "/");
print (1-(division[1]/division[2]))*100
}
# else
# {
# print "#"$0;
# }
fflush();
}
これにより、rsync出力が除外され、次の形式でパーセンテージが提供されます。
53.7037
55.5556
57.4074
59.2593
61.1111
62.963
10進数を取り除くために、出力をsedに送ります。
sed 's/\([0-9]*\).*/\1/'
次の出力が得られます。
64
66
68
70
72
74
75
77
これらの番号は、次のようにダイアログにパイプされます。
dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70
私の知る限り、「dialog --gauge」などはこれを受け入れる必要がありますが、突然100%に達するまで0%の進行状況を表示するだけです。
誰かが私をここで正しい方向に向けることができますか?進行中のプログレスバーから遠く離れていますか?これを達成するためのより良い方法はありますか?
よろしく、
クリスター
編集:@lynxlynxlynxの答えを考慮に入れた後、正しいコマンドラインは次のとおりです。
rsync -avz --progress -e "ssh" user@server:/home/user/data/ /home/user/data \
| awk -f /home/user/rsync.awk \
| sed --unbuffered 's/([0-9]*).*/\1/' \
| dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70