Ich suche ein Programm, das in der Lage ist, Zip-Archive über die Windows-Befehlszeile zu entpacken und das in der Lage ist, einen Fortschrittsbalken oder eine Prozentanzeige auf der Befehlszeile anzuzeigen. Ich möchte es in einem Perl-Skript verwenden und so dem Benutzer einen Hinweis geben, wie lange der Vorgang dauern wird. Ich habe es mit 7zip (http://www.7-zip.org/) und Entpacken (von InfoZIP) konnte aber das oben beschriebene Verhalten nicht erzeugen. Weiß jemand, wie man das Problem lösen kann?
Aktualisieren: Derzeit versuche ich es mit diesem Ansatz:
#!/usr/bin/perl
use strict; $|++;
use warnings;
use Archive::Zip;
my $zip = Archive::Zip->new('file.zip');
my $total_bytes = 0;
my $bytes_already_unzipped = 0;
foreach my $member ($zip->members()) {
$total_bytes += $member->uncompressedSize();
}
foreach my $member ($zip->members()) {
$zip->extractMember($member);
$bytes_already_unzipped += $member->uncompressedSize();
print progress_bar($bytes_already_unzipped, $total_bytes, 25, '=' );
}
#routine by tachyon at http://tachyon.perlmonk.org/
#also have a look at http://oreilly.com/pub/h/943
sub progress_bar {
my ( $got, $total, $width, $char ) = @_;
$width ||= 25; $char ||= '=';
my $num_width = length $total;
sprintf "|%-${width}s| Got %${num_width}s bytes of %s (%.2f%%)\r",
$char x (($width-1)*$got/$total). '>',
$got, $total, 100*$got/+$total;
}
Ich habe jedoch zwei Probleme:
- dieser Ansatz scheint sehr langsam zu sein
- Der Fortschrittsbalken wird nicht regelmäßig aktualisiert, sondern nur, wenn eine Datei fertig extrahiert ist. Da ich einige große Dateien habe, scheint das System beim Extrahieren nicht zu reagieren