帶進度條的 Tar 備份

帶進度條的 Tar 備份

我想在 tar 備份命令中新增一個進度條。我發現酒吧shell 腳本應該能夠做到這一點,但我無法找出正確的命令。

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% 時顯示。 [...]


我能想到的出於備份目的顯示進度條的唯一方法(除了編譯自訂版本焦油與酒吧) 是:

  1. 計算文件的累積大小/media/data

  2. 逐一建立backup.tar並附加文件。/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

警告:

  • 這可能會減慢您的備份進度。
  • 檔案名稱不能包含換行符號。

相關內容