Freitag, 25. April 2008

Command Line Zip für Windows

Meines Wissens gibt es außer winrar kein Kommandozeilentool zum Zippen von Dateien und Ordnern für Windows.

Im Rahmen eines kleineren Kundenauftrags habe ich aber genau so ein Tool zum Einsatz in Batchdateien für Windows benötigt.

Mit Perl ist so ein Tool sehr schnell geschrieben.

Man nehme Archive::Zip.

In der Source-Code Distribution (Archive-Zip-1.23.tar.gz) befinden sich im Ordner examples zahlreiche Beispiele zur Verwendung von Archive::Zip.

Das Beispielprogramm zip.pl aus dem examples Verzeichnis ist genau das gewünschte Tool.

zip.pl


#!/bin/perl -w
# Creates a zip file, adding the given directories and files.
# Usage:
# perl zip.pl zipfile.zip file [...]

use strict;
use Archive::Zip qw(:ERROR_CODES :CONSTANTS);

die "usage: $0 zipfile.zip file [...]\n"
if (scalar(@ARGV) < 2);

my $zipName = shift(@ARGV);
my $zip = Archive::Zip->new();

foreach my $memberName (map { glob } @ARGV)
{
if (-d $memberName )
{
warn "Can't add tree $memberName\n"
if $zip->addTree( $memberName, $memberName ) != AZ_OK;
}
else
{
$zip->addFile( $memberName )
or warn "Can't add file $memberName\n";
}
}

my $status = $zip->writeToFileNamed($zipName);
exit $status;


Anwendungsbeispiele:

Komplettes Verzeichnis zippen

perl zip.pl test.zip examples

oder auch

perl zip.pl test.zip examples/*


Einzelne Dateien zippen

perl zip.pl test.zip datei1.doc datei2.doc dateiN.doc


Siehe auch:

Hackszine.com: Command Line Zip for Windows

Kommentare:

Henning Manske hat gesagt…

Ich arbeite viel mit Perl unter Windows, aber als Command Line Zip möchte ich einen Blick auf Zip und UnZip von Info-ZIP empfehlen. Dennoch Danke für die Vorstellung des Moduls, einen Einsatz kann ich mir in einem anderem Kontext gut vorstellen.

Thomas Fahle hat gesagt…

Hallo Henning,

danke für den Hinweis auf Info-ZIP.

Da habe ich wohl etwas zu früh aufgehört zu googeln.

Thomas

Anonym hat gesagt…

Ich verwende für meine in perl geschriebenen release tools 7-zip.

Herbert Breunung