Fortschrittanzeige von tar via dialog --gauge
Fortschrittanzeige von tar via dialog --gauge
Hallo,
ich würde gerne eine Fortschrittanzeige für "tar" mit Hilfe von "dialog --gauge" beim dekomprimieren anzeigen.
Für "wget" habe ich bereits eine funktionierende Lösung gefunden und angepasst:
http://wiki.hedinux.org/wakka.php?wiki=SeRialFonctions
Leider habe ich bisher nur folgende zwei Seiten gefunden, die jedoch anscheinend nicht zu funktionieren scheinen:
http://codigolivre.org.br/plugins/scmcv ... root=sagu2
http://www.ivarch.com/programs/quickref/pv.shtml
Vielleicht weiss ja jemand Rat.
ich würde gerne eine Fortschrittanzeige für "tar" mit Hilfe von "dialog --gauge" beim dekomprimieren anzeigen.
Für "wget" habe ich bereits eine funktionierende Lösung gefunden und angepasst:
http://wiki.hedinux.org/wakka.php?wiki=SeRialFonctions
Leider habe ich bisher nur folgende zwei Seiten gefunden, die jedoch anscheinend nicht zu funktionieren scheinen:
http://codigolivre.org.br/plugins/scmcv ... root=sagu2
http://www.ivarch.com/programs/quickref/pv.shtml
Vielleicht weiss ja jemand Rat.
In Ordnung. Ist es dann vielleicht möglich wärend des Entpackens eine Infobox anzeigen zu lassen?
z.B.
z.B.
Code: Alles auswählen
{ tar xvft archiv.tar.gz } | dialog --infobox "Bitte warten..." 0 0
Wie wäre es mit oder auch
Code: Alles auswählen
dialog --infobox "Bitte warten..." 0 0
tar xft archiv....
Code: Alles auswählen
tar xvft archiv... | dialog --title "Entpacke Dateien..." --progressbox 0 0
Erst einmal danke für die Hilfe!
... zeigt leider nur kurz die Infomeldung an und dann kommt die Ausgabe von "tar".
Ist doch eigentlich das gleiche wie meine Version, oder?
Allerdings wird auch nur kurz die Infomeldung angezeigt - diesmal wird "tar" nicht mehr ausgeführt. "Dialog" kennt übrigens kein "--progressbox".
Ich hätte gerne, dass die Infomeldung während des Entpackens angezeigt wird - keine Ausgabe von "tar".
Code: Alles auswählen
dialog --infobox "Bitte warten..." 0 0
tar xft archiv....
Code: Alles auswählen
tar xvft archiv... | dialog --title "Entpacke Dateien..." --progressbox 0 0
Code: Alles auswählen
tar xvft archiv.tar.gz | dialog --title "Entpacke Dateien" --infobox "Bitte warten..." 0 0
Ich hätte gerne, dass die Infomeldung während des Entpackens angezeigt wird - keine Ausgabe von "tar".
Man könnte das in 2 Teile zerhacken: Einer liefert das Archivfile als Bytestream und macht derweil den Progressbar: Dieser Teil müsste nur an dialog die Prozente liefern, die er schon bearbeitet hat, dafür muß er nicht zweimal das Archiv lesen, es reicht die Filegröße als 100%-Marke.Joghurt hat geschrieben:Du bräuchtest zwei komplette Durchgänge von tar. Den ersten, um die Anzahl der Dateien zu bestimmen, und den zweiten dann zum wirklichen entpacken.
Ein zweiter Prozess nimmt diesen Bytestream und jagt den durch 'tar xpf -'.
Das Ganze läuft vielleicht nicht 100% synchron, denn wenn der erste Prozeß die 100%-Marke erreicht hat, kann eine Verzögerung wegen der Pipe zwischen den Teilen entstehen, aber das wird den Nutzen nicht bis zur Wertlosigkeit verzerren...
Warum gibst du auch "t" mir an? xf gibt keine Ausgaben.twelve hat geschrieben:... zeigt leider nur kurz die Infomeldung an und dann kommt die Ausgabe von "tar".
Meins schon..."Dialog" kennt übrigens kein "--progressbox".
Ich hätte gerne, dass die Infomeldung während des Entpackens angezeigt wird - keine Ausgabe von "tar"
Mein erstes Beispiel, ohne "t"
Zuletzt geändert von Joghurt am 16.04.2006 21:07:03, insgesamt 1-mal geändert.
auch ne Möglichkeit:
Gruß
gms
Code: Alles auswählen
{ tar -xzf archive.tar.gz & }; dialog --infobox "bitte warten ..." 0 0; wait %%
gms
Die Variante von gms funktioniert ganz gut, allerdings muss man %% in $! abändern:
Joghurt
Mein "dialog" (Version: 1.0-20050306) kennt "--progressbox" nicht, und ich habe auch mit Google und auf der Homepage von "dialog" nichts in der Richtung gefunden.
Es wird also anscheinend nicht standardmäßig unterstützt.
yeti
Die Variante wäre anscheinend genau was ich haben wollte. Ich kann es zwar nachvollziehen, aber nicht umsetzen.
Wäre super, wenn mir jemand erklären könnte wie das funktioniert.
Danke an alle.
Gruß Robert
Code: Alles auswählen
{ tar xzf archive.tar.gz & }; dialog --infobox "bitte warten ..." 0 0; wait $!
Mein "dialog" (Version: 1.0-20050306) kennt "--progressbox" nicht, und ich habe auch mit Google und auf der Homepage von "dialog" nichts in der Richtung gefunden.
Es wird also anscheinend nicht standardmäßig unterstützt.
yeti
Die Variante wäre anscheinend genau was ich haben wollte. Ich kann es zwar nachvollziehen, aber nicht umsetzen.
Wäre super, wenn mir jemand erklären könnte wie das funktioniert.
Danke an alle.
Gruß Robert
Zuletzt geändert von twelve am 19.04.2006 20:58:32, insgesamt 1-mal geändert.
Ich verwende die ganz normale Bash.
Wenn ich eingebe, kommt: "bash: fg: %%: no such job" bei wird die pid des letzten Befehls angezeigt.
Die pid des der (aktuellen) Bash, die den Befehl ausgeführt hat, lässt sich mit anzeigen.
Gruß
Robert
Wenn ich
Code: Alles auswählen
%%
Code: Alles auswählen
$!
Die pid des der (aktuellen) Bash, die den Befehl ausgeführt hat, lässt sich mit
Code: Alles auswählen
$$
Gruß
Robert
OK, you asked for it, now you have to live with ittwelve hat geschrieben:Die Variante wäre anscheinend genau was ich haben wollte.
Code: Alles auswählen
#!/bin/sh
FILE=Datei.tar.gz
SIZE=$(stat --printf "%s" $FILE)
COUNT=0
# BLOCKSIZE nicht zu klein wählen, je größer, desto besser, desto seltener
# wird jedoch der Balken aktualisiert
BLOCKSIZE=524288
( while [ $COUNT -lt $SIZE ]; do
dd bs=$BLOCKSIZE count=1 2>/dev/null
COUNT=$(expr $COUNT + $BLOCKSIZE)
PER=$(expr 100 \* $COUNT / $SIZE)
if [ $PER -gt 100 ]; then PER=100; fi
echo $PER 1>&3
done < $FILE | tar xzf - ) 3>&1 | dialog --title "Entpacke..." --gauge "Jetzt wäre eine gute Gelegenheit, die Registrierungskarte auszufüllen" 0 0
wow geil
Einen kleine Anregung hätte ich noch:
Damit der Balken bei kleinen Dateien nicht zu sehr springt und bei großen Dateien eine unnötig kleine Granularität vermieden wird, könnte die BLOCKSIZE aus der Dateigröße ermittelt werden:
z.B.:
Gruß
gms
Einen kleine Anregung hätte ich noch:
Damit der Balken bei kleinen Dateien nicht zu sehr springt und bei großen Dateien eine unnötig kleine Granularität vermieden wird, könnte die BLOCKSIZE aus der Dateigröße ermittelt werden:
z.B.:
Code: Alles auswählen
BLOCKSIZE=$(expr $SIZE / 100)
gms
Eine konstante Blockgröße hat den Vorteil, dass immer in selben Zeitabständen aktualisiert wird.
Es reicht ja, einmal pro Sekunde den Fortschritt zu zeigen, und der kann ja ruhig von 20 auf 70% hüpfen. Ansonsten wird unnötig Zeit mit der Darstellung verbracht. (Ein paar Windowsinstaller sind da berühmt. Da sie meinen, jedesmal jeden Dateinamen anzeigen zu müssen, brauchen sie 1 Minute zum entpacken, obwohl es auch in 10 Sekunden gegangen wäre...)
Aber jeder, wie er will.
Es reicht ja, einmal pro Sekunde den Fortschritt zu zeigen, und der kann ja ruhig von 20 auf 70% hüpfen. Ansonsten wird unnötig Zeit mit der Darstellung verbracht. (Ein paar Windowsinstaller sind da berühmt. Da sie meinen, jedesmal jeden Dateinamen anzeigen zu müssen, brauchen sie 1 Minute zum entpacken, obwohl es auch in 10 Sekunden gegangen wäre...)
Aber jeder, wie er will.