Archive::Zip - Verzeichnisse und Dateien im Zip-Format packen und entpacken

| | Kommentare (2)

Das ZIP-Dateiformat ist ein offenes Format zur komprimierten Archivierung von Dateien. Neben mehreren Dateien können auch ganze Verzeichnisbäume in einer einzelnen ZIP-Datei archiviert und komprimiert werden.

Archive::Zip von Adam Kennedy ermöglicht das Erstellen und Entpacken von Zip-Archiven

Die Handbuchseite zu Archive::Zip ist ziemlich verwirrend. Glücklicherweise befinden sich in der Source-Code Distribution (Archive-Zip-1.23.tar.gz) im Ordner examples zahlreiche Beispiele zur Verwendung von Archive::Zip, von denen ich hier zwei vorstelle:

Verzeichnisse und Dateien zippen

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

Zip-Dateien entpacken

Auch hier findet man das gewünschte Tool als Beispielprogramm unzipAll.pl im examples Verzeichnis.

unzipAll.pl

#!/bin/perl -w
# Extracts all files from the given zip
# $Revision: 1.3 $
# usage:
#	perl unzipAll.pl [-j] zipfile.zip
# if -j option given, discards paths.
#
use strict;

use vars qw( $opt_j );
use Archive::Zip qw(:ERROR_CODES);
use Getopt::Std;

$opt_j = 0;
getopts('j');

if (@ARGV < 1)
{
	die <<EOF
	usage: perl $0 [-j] zipfile.zip
	if -j option given, discards paths.
EOF
}

my $zip = Archive::Zip->new();
my $zipName = shift(@ARGV);
my $status = $zip->read( $zipName );
die "Read of $zipName failed\n" if $status != AZ_OK;

$zip->extractTree();

Anwendungsbeispiel:

$ perl unzipAll.pl X.zip

Known Bugs

Mit Archive::Zip erstellte Archive lassen sich nicht immer mit Windows-Bordmitteln öffnen. Die Behebung dieses Fehlers ist derzeit in Arbeit. Achten Sie ggf. auf neuere Versionen.

Siehe auch:

2 Kommentare

2011/05/05: error in script zip.pl

Can't call method "desiredCompressionLevel" on an undefined value at C:/strawber
ry/perl/vendor/lib/Archive/Zip/Archive.pm line 249.

windows xp, perl 5, version 12, subversion 1 (v5.12.1) built for MSWin32x86-multi thread

dg

Hall Daniel, guck doch mal hier: Perlmonks: problem with Archive::Zip.

Gruß, Thomas

Jetzt kommentieren

Über diese Seite

Diese Seite enthält einen einen einzelnen Eintrag von Thomas Fahle vom 16.09.08 20:45.

Tagesaktuelle Währungsumrechnung ist der vorherige Eintrag in diesem Blog.

Devel::Size - Wieviel Speicher belegt meine Datenstruktur? ist der nächste Eintrag in diesem Blog.

Aktuelle Einträge finden Sie auf der Startseite, alle Einträge in den Archiven.

Blog Roll

Powered by

Powered by Movable Type 5.2.10

Creative Commons-Lizenz

Creative Commons License
Dieses Weblog steht unter einer Creative Commons-Lizenz.