
我想在 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% 時顯示。 [...]
我能想到的出於備份目的顯示進度條的唯一方法(除了編譯自訂版本焦油與酒吧) 是:
計算文件的累積大小
/media/data
。逐一建立
backup.tar
並附加文件。/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
警告:
- 這可能會減慢您的備份進度。
- 檔案名稱不能包含換行符號。