PV -n コマンドを使用してパーティションを読み込み、gzip とパイプを使用して読み取ったデータを圧縮し、ファイルを保存します。データの読み書き中に、Linuxダイアログユーティリティを使用して進行状況を表示するためにwhileループを使用しています。
これはうまく機能し、進捗状況が更新されました。また、転送速度/読み取り速度をメガビット単位で表示したいと思います。また、進行状況と転送速度(メガビット)でデータベーステーブルを更新したいと思います。
各行を読み取るためにwhileループを使用しているため、各更新の進行状況を新しい行に表示する必要があります。下記のマイコードをご覧ください。
(pv -n /dev/$partitions | gzip -c >$path/${filename// /_}-${partitions}.img.gz) 2>&1 | while IFS= read -r progress;
do
echo "processing /dev/$partitions currently completed $progress" >/run/log.log
echo $progress | dialog --title "Capturing OS image of $hdd" --gauge " now creating image of HDD $hdd writing $filename Image, please wait...\n\n\n
Processing Partition $i of $totalparts\n\n
This process may take some time to complete\n\n" 13 90 0
mysql -u root -pxxxxxx dbi -h localhost | insert into speed(progress, speed) Values ("$line", "mbits")
done
pv -nコマンドを使用すると、改行の進行状況の数値のみが返されます。以下の例をご覧ください。
( /data/pv -n /dev/nvme0n1p1 | gzip -c >/run/test.img )
5
9
29
67
100
上記の進行状況バーは非常に便利ですが、平均速度(メガビット)でデータベースを更新したいと思います。
進行状況を確認するために平均速度増分でpvコマンドを実行すると、新しい行を印刷するのではなく、同じ行で進行状況が更新され、スクリプトが中断されます。以下の例をご覧ください。
(pv -rep /dev/nvme0n1p1 | gzip -c >/run/test.img )
[4.9MiB/s] [====> ] 4% ETA 0:00:19
理想的な出力は次のとおりです。
(pv -rep /dev/nvme0n1p1 | gzip -c >/run/test.img )
[ 4.18MiB/s] [====> ] 14% ETA 0:00:19
[14.49MiB/s] [===========> ] 54% ETA 0:00:19
[24.39MiB/s] [========================> ] 74% ETA 0:00:19
[44.29MiB/s] [===========================> ] 78% ETA 0:00:19
[46.19MiB/s] [=============================> ] 98% ETA 0:00:19
[57.99MiB/s] [==============================>] 100% ETA 0:00:19
AWK、Sed、および Grep を使用して必要なデータをフォーマットし、while ループで使用できます。しかし、どのように動作させることができますか?
pv -F $'%t %r %e\n' を使用すると、目的の結果が得られます。ただし、AWK、grep、または tr コマンドは使用できません。何も返さない以下の例をご覧ください。
(pv -F $'%t %r %e\n' /dev/nvme0n1p1 | gzip -c >/run/test.img ) 2>&1 | tr -d ':[]'
また、上記と同じコマンドを使用してstderrをstdoutにリダイレクトしないと、予想される結果は得られません。下記をご覧ください。 tr -d を使用して次の文字「:[]」を削除すると機能しません。
(pv -F $'%t %r %e\n' /dev/nvme0n1p1 | gzip -c >/run/test.img ) | tr -d ':[]'
0:00:01 [25.2MiB/s] ETA 0:00:18
0:00:02 [23.7MiB/s] ETA 0:00:18
0:00:03 [ 100MiB/s] ETA 0:00:07
0:00:04 [ 199MiB/s] ETA 0:00:01
pv -n -r -eなどの他のパラメータを使用すると、他のすべてのパラメータは無視され、改行には数値進行値のみが返されます。
上記の機能を達成するために使用できるpvの代替案があるかもしれませんし、pvコマンドを使うのに誰かが役立つかもしれません。
答え1
-F を使用して出力形式を指定します。
たとえば、
pv -F "%T %t %r %e"
経過時間の割合と到着予定時刻が表示されます。