Teersicherung mit Fortschrittsbalken

4601
Jens

Ich möchte meinem tar-Sicherungsbefehl eine Fortschrittsleiste hinzufügen. Ich habe herausgefunden, dass das Bar- Shell-Skript dazu in der Lage sein sollte, aber ich kann den richtigen Befehl nicht herausfinden.

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

Mit dem obigen Befehl konnte ich einige Informationen anzeigen, aber noch keine Statusanzeige.

3
Mögliches Duplikat von [Gibt es eine Möglichkeit, einen Teerfortschritt pro Datei zu sehen?] (http://superuser.com/questions/168749/is-there-a-way-to-see-any-tar-progress-per- Datei) Daniel Andersson vor 11 Jahren 0

1 Antwort auf die Frage

3
Dennis

Sorry, aber das ist nicht möglich. Aus der Datei barselbst:

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. 

Das Problem ist, dass zum Anzeigen der Fortschrittsleiste barzuerst die Dateigröße bekannt sein muss.

Für das Extrahieren eines Archivs ist das kein Problem: Wenn backup.tares 100 MiBgroß ist und 50 MiBbisher verarbeitet wurde, sind wir bei 50 %.

Zum Erstellen eines Archivs wird jedoch bargelesen stdin, was für alle praktischen Zwecke unendlich ist. Wie die Dokumentation sagt:

Unendliche Streams sind nicht schön: Der Balken wird nur bei 0% und bei 100% angezeigt. [...]


Die einzige Möglichkeit, Fortschrittsbalken für Sicherungszwecke anzuzeigen (außer das Erstellen einer benutzerdefinierten Version von tar mit Balken ) ist:

  1. Berechnen Sie die angesammelte Größe der Dateien /media/data.

  2. Erstellen Sie backup.tardie Dateien einzeln und fügen Sie sie /media/dataan.

  3. Berechnen Sie nach jeder Datei den aktuellen Prozentsatz und zeigen Sie ihn an.

  4. gzip backup.tar(Sie können verwenden tarfür diese).

Beispiel:

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 

Vorsicht:

  • Dies wird Ihren Sicherungsvorgang wahrscheinlich verlangsamen.
  • Dateinamen dürfen keine Zeilenvorschubzeichen enthalten.