
tarバックアップコマンドに進捗バーを追加したいのですが、バーシェル スクリプトでこれを行うことができるはずですが、正しいコマンドがわかりません。
sudo tar pzcf - /media/data | bar > /media/backups/backup.tar.gz
上記のコマンドでいくつかの情報を表示できましたが、進行状況バーはまだ表示されていません。
答え1
申し訳ありませんが、これは不可能です。ファイルbar
自体から:
Synopsis:
'bar' works just like 'cat', but shows a progress bar in ASCII art on stderr.
The script's main function is meant to be usable in any Bourne shell to be
suitable for install scripts without the need for any additional tool.
問題は、進行状況バーを表示するには、bar
まずファイルのサイズを知る必要があることです。
のために抽出するアーカイブの場合は問題ありません。backup.tar
が100 MiB
大きく、50 MiB
これまでに処理されている場合は です50 %
。
しかし、作成アーカイブbar
は から読み込まれますがstdin
、これは実質的には無限大です。ドキュメンテーション言う:
無限ストリームは良くありません。バーは 0% と 100% でのみ表示されます。[...]
バックアップ目的で進捗バーを表示する唯一の方法は、(カスタムバージョンのコンパイル以外に)バー付きタール) は:
ファイルの累積サイズを計算します
/media/data
。backup.tar
ファイルを 1 つずつ作成して追加します/media/data
。各ファイルの後に、現在のパーセンテージを計算して表示します。
gzip
backup.tar
(あなたできるこれに使用しますtar
。
例:
TOTAL=$(du -b /media/data | grep -oP "^\d+")
CURRENT=0
echo "Archiving:"
IFS="
"
for FILE in $(find /media/data -type f); do
tar rf backup.tar $FILE
CURRENT=$(($CURRENT+$(du -b $FILE | grep -oP "^\d+")))
echo -en "\r"$((100*($CURRENT-1)/$TOTAL+1))"%"
done
echo
echo "Compressing:"
bar backup.tar | gzip > backup.tar.gz
rm backup.tar
注意:
- これにより、バックアップの進行が遅くなる可能性があります。
- ファイル名には改行文字を含めることはできません。