
Ich möchte meinem Tar-Backup-Befehl einen Fortschrittsbalken hinzufügen. Ich habe herausgefunden, dass derBarEin Shell-Skript sollte dazu in der Lage sein, 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 keinen Fortschrittsbalken.
Antwort1
Tut mir leid, aber das ist nicht möglich. Aus der Datei bar
selbst:
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 besteht darin, dass zum Anzeigen des Fortschrittsbalkens bar
zunächst die Größe der Datei bekannt sein muss.
FürExtrahierenein Archiv, das ist kein Problem: Wenn groß backup.tar
ist 100 MiB
und 50 MiB
bisher verarbeitet wurde, sind wir bei 50 %
.
FürErstellenein Archiv, bar
liest aus stdin
, was für alle praktischen Zwecke unendlich ist. Da dieDokumentationsagt:
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, die mir einfällt (abgesehen von der Erstellung einer benutzerdefinierten Version vonTeer mit Balken) Ist:
Berechnen Sie die Gesamtgröße der Dateien
/media/data
.Erstellen
backup.tar
und fügen Sie die Dateien/media/data
nacheinander an.Berechnen und zeigen Sie nach jeder Datei den aktuellen Prozentsatz an.
gzip
backup.tar
(Siedürfenverwendentar
).
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 Zeilenumbruchzeichen enthalten.