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:
Code:
#!/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:
Code:
perl -MCPAN -e 'install Term::ProgressBar'
Jetzt kann es verwendet werden z. B. so:
Code:
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
Lesezeichen