PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Script]: Fortschrittsbalken für Piping



fork
28-08-2004, 18:46
Wer mal wieder wissen will wie lange der tar denn jetzt noch ungefähr dauert oder sonst eine Status anzeige für irgendwelche gepipte Daten haben möchte ganz sich dieses Skriptes bedienen:


#!/usr/bin/perl

use Term::ProgressBar;
use constant VERSION => 1.02;

if($#ARGV < 0) {
print "\n".
"Usage: $0 <size of stream in bytes>\n".
"\n".
"Description: shows a progress bar for a datastream\n".
" reads from stdin writes to stdout\n\n";
exit(1);
}


binmode(STDIN);
binmode(STDOUT);

$bufsize=1024*100; # jeweils 100k verarbeiten, es wird aber meistens weniger
# angeliefert

$TOTAL_SIZE=$ARGV[0];

$progress = Term::ProgressBar->new ({count => $TOTAL_SIZE,ETA=>linear});

for( $i=20,
$DONE_SIZE=0,
$time1=time();

sysread STDIN,$buffer,$bufsize;

$i--) {
$DONE_SIZE+=length($buffer);
syswrite(STDOUT,$buffer);
if(!$i) {
$i=20;
if($time1 != time()) {
$progress->update($DONE_SIZE);
$time1=time();
}
}
}

# Damit's schön aussieht: Fortschrittsbalken auf 100% setzen
$progress->update ($TOTAL_SIZE);

Das Modul Term::ProgressBar ist glaube ich Standardausstattung wenn nicht, einfach ueber das Internet installieren mit:

perl -MCPAN -e 'install Term::ProgressBar'
Jetzt kann es verwendet werden z. B. so:

tar -cf - /pfad | showprogress.pl $(du -sb /pfad) | gzip >/backup.tar.gz

Ach ja der Fortschrittsbalken wird standardmaessig nach stderr geschrieben. Keine allzu gute Idee ist es auch das Skript für exzessive I/O-Jobs einzusetzen die werden dadurch etwas ausgebremst

peschmae
28-08-2004, 18:59
Nett. Jetzt muss ich nur noch pipes einbauen :)

Jemand hier im Forum hatte irgendwann mal cp & co entsprechend erweitert dass sie immer ne Progressbar anzeigen können - k.A. was daraus geworden ist...

MfG Peschmä

fork
28-08-2004, 20:41
V1.02 Jetzt noch etwas resourcenschonender...

peschmae
28-08-2004, 22:15
Das Debian-Progressbar-Paket heisst übrigens libterm-progressbar-perl

MfG Peschmä