Fortschrittsbalken für cp und mv
German, Linux, gentoo September 26th, 2007Ich hatte mich schon immer gefragt, ob man bei cp oder mv nicht auch eine Fortschrittsanzeige einbauen könnte. In den famosen Gentoo Foren bin ich dann tatsächlich fündig geworden. Die Patches waren in einigen Versionen der coreutils enthalten, allerdings auf Dauer nicht von den Upstream Maintainern geduldet worden.
Jim Meyering
Hm. Ist ein Wort. Kann man so sehen, muss man aber nicht. Die Patches werden nach wie vor gepflegt, also patchen wir uns selbst. Mit Gentoo und ein wenig Geschick sind wir in ein paar Sekunden damit durch und können etwa 9 Minuten später ein leuchtendes coreutils in unserem System wissen.
$ emerge -v coreutils
Genau wenn es heisst:
* Done with patching
STRG+Z drücken!
Das legt emerge in den Hintergrund und wir können den Patch an Portage vorbei in den Code schummeln. Am besten ihr macht ab coreutils- mit tab completion weiter um die richtige Version zu finden.
cd /var/tmp/portage/sys-apps/coreutils-6.9-r1/work/coreutils-6.9/ wget http://dev.gentoo.org/~vapier/dist/coreutils-6.9-patches-1.2.tar.bz2 tar -xjf coreutils-6.9-patches-1.2.tar.bz2
Wir brauchen nur den progress-bar Patch, nach dem Patchen holen wir emerge mit fg zurück.
patch -p1 < patch/generic/001_all_coreutils-gen-progress-bar.patch fg
Von nun an zeigen cp und mv mit der -g Option zusätzlich Fortschritt in Prozent, Grösse der Datei, Übertragungsgeschwindigkeit und verbleibende Dauer an. Ein Alias in der .zshrc (oder .bashrc) macht sich bei mir ganz gut.
cp -g /mnt/etcbackup.zip ~/temp etcbackup.zip | 1% | 175 MiB | 122 KiB/s | ETA 00:24.03
Wie man den Patch auf Ubuntu/Debian einbaut steht übrigens in den Ubuntu Foren.






September 26th, 2007 at 11:51
Jepp, das war früher mal in cp und mv enthalten. Wurde aber dann irgendwie entfernt, obwohl es eigentlich eine äußerst nützliche Funktion ist!
January 24th, 2008 at 13:51
Schaut mal hier: http://chris-lamb.co.uk/2008/01/24/can-you-get-cp-to-give-a-progress-bar-like-wget/
Ein bisschen schöner, auch weil man das Patchen bei einem re-emerge gerne mal vergisst ;-)
January 29th, 2008 at 16:46
@jesse
Dieser “Stunt” kostet massiv Performance, während dieser Patch die Geschwindigkeit sogut wie garnicht beeinflusst.
Also bring emerge lieber bei, von alleine zu patchen =)
January 29th, 2008 at 18:16
maow, ja, stimmt wohl. Gibt einige Kommentare dazu. Angeguckt habe ich mir die Geschichte sowieso noch nicht. Dafür habe ich einen Blick in die coreutils ebuilds geworden.
In coreutils-6.9-r1.ebuild (stable) sollte es genügen, die Zeile
rm -f "${PATCHDIR}"/generic/001_*progress*auszukommentieren.
Bei coreutils-6.10-r1 sieht es leider schon anders aus,
EPATCH_EXCLUDE="001_all_coreutils-gen-progress-bar.patch" \ist wohl aus gutem Grund drin, denn der aktualisierte Patch failed bisher.
January 30th, 2008 at 10:12
Übrigens, eine weitere, performantere Lösung als mit strace zeigt adminlife in seinem Blog https://www.adminlife.net/allgemein/cp-mit-statusanzeige-fuer-grosse-dateien-hack/