web-dev-qa-db-ja.com

プログレスバー付きのtarバックアップ

Tarバックアップコマンドにプログレスバーを追加したいと思います。 bar シェルスクリプトでこれを実行できるはずですが、正しいコマンドを理解できません。

Sudo tar pzcf - /media/data | bar > /media/backups/backup.tar.gz

上記のコマンドでいくつかの情報を表示できましたが、プログレスバーはまだありません。

3
Jens

申し訳ありませんが、これは不可能です。ファイル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.tar100 MiBで、50 MiBが処理されている場合は問題ありません。これまでのところ、私たちは50 %にいます。

ただし、creatingアーカイブの場合、barstdinから読み取ります。これは、すべての実用的な目的で無限です。 documentation が言うように:

無限のストリームは適切ではありません。バーは0%と100%でのみ表示されます。 [...]


私が考えることができるバックアップ目的でプログレスバーを表示する唯一の方法は(tarのカスタムバージョンをbarでコンパイルする以外に)次のとおりです。

  1. ファイルの累積サイズを計算します/media/data

  2. backup.tarを作成し、/media/dataからファイルを1つずつ追加します。

  3. 各ファイルの後で、現在のパーセンテージを計算して表示します。

  4. 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

注意:

  • これにより、バックアップの進行が遅くなる可能性があります。
  • ファイル名に改行文字を含めることはできません。
3
Dennis