Tarバックアップコマンドにプログレスバーを追加したいと思います。 bar シェルスクリプトでこれを実行できるはずですが、正しいコマンドを理解できません。
Sudo tar pzcf - /media/data | bar > /media/backups/backup.tar.gz
上記のコマンドでいくつかの情報を表示できましたが、プログレスバーはまだありません。
申し訳ありませんが、これは不可能です。ファイル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
が最初にファイルのサイズを知る必要があることです。
extractingアーカイブの場合、問題ありません。backup.tar
が100 MiB
で、50 MiB
が処理されている場合は問題ありません。これまでのところ、私たちは50 %
にいます。
ただし、creatingアーカイブの場合、bar
はstdin
から読み取ります。これは、すべての実用的な目的で無限です。 documentation が言うように:
無限のストリームは適切ではありません。バーは0%と100%でのみ表示されます。 [...]
私が考えることができるバックアップ目的でプログレスバーを表示する唯一の方法は(tarのカスタムバージョンをbarでコンパイルする以外に)次のとおりです。
ファイルの累積サイズを計算します/media/data
。
backup.tar
を作成し、/media/data
からファイルを1つずつ追加します。
各ファイルの後で、現在のパーセンテージを計算して表示します。
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