Okay, ich habe einige Zeit gebraucht, um zu verstehen, was tar -F
eigentlich geht (ist das überhaupt dokumentiert? Ich habe gerade die Quelle gelesen), aber ich denke, ich habe eine ziemlich gute Lösung für Sie gefunden.
Da pv
es nicht unterstützt wird, so zu tun, als ob bereits ein gewisser Fortschritt erzielt wurde, musste ich es durch ein ähnliches Werkzeug namens ersetzen bar
(das in Debian unter diesem Namen verfügbar ist oder auf seiner abscheulichen Startseite zu finden ist ).
Die Lösung, die ich gefunden habe, leitet die Daten aller zusätzlichen Volumes durch eine Named Pipe (FIFO) weiter, um den bar
Aufruf in den Stream einzufügen. Um zu vermeiden, dass der Fortschrittsbalken jedes Volumes in einer neuen Zeile gedruckt wird, verwende ich 'tput', um den Cursor nach jedem Volume nach oben zu bewegen.
In Ihrem Code würden Sie die letzte Zeile changedisk()
durch Folgendes ersetzen . (Dies ist aus Gründen der Kürze etwas hackig; passen Sie es einfach an, sobald Sie die Idee haben)
tput cuu1 >&2 # clear previous progress bar (cat somefifo | bar -ns \ --size "$SIZE" \ --completed $((($-1)*$)) \ > $-Vol$TAR_VOLUME.tar) & echo somefifo >&$TAR_FD
Und ersetzen Sie den pv
Aufruf in der letzten Zeile Ihres Skripts mit bar -ns --size $
.
Damit dies funktioniert, müssen Sie export
vor der SIZE-Definition stehen und natürlich schon einmal ausgeführt mkfifo somefifo
haben. Stellen Sie sicher, dass Sie auch die Berechtigungsbits dieses FIFOs sichern. Möglicherweise möchten Sie auch in Betracht ziehen, mktemp
stattdessen eine temporäre Pipe sicher zu erstellen. Kommt auf dein Szenario an, denke ich.
Ich habe eine noch nicht definierte Variable $VOLSIZE
verwendet, die sich in Bytes auf die Größe Ihrer Volumes ausweiten sollte. Ich bin nicht sicher, wie dies in Ihrem Setup bestimmt wird. Möglicherweise müssen Sie hier etwas ausführlicher vorgehen, z. B. die kumulierte Summe aller vorherigen Volumengrößen.