進捗バー付きの Tar バックアップ

進捗バー付きの Tar バックアップ

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.tar100 MiB大きく、50 MiBこれまでに処理されている場合は です50 %

しかし、作成アーカイブbarは から読み込まれますがstdin、これは実質的には無限大です。ドキュメンテーション言う:

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


バックアップ目的で進捗バーを表示する唯一の方法は、(カスタムバージョンのコンパイル以外に)バー付きタール) は:

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

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

  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

注意:

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

関連情報