archive::zip::tree(3)

NAME

Archive::Zip::Tree -- methods for adding/extracting trees
using Archive::Zip

SYNOPSIS

use Archive::Zip;
use Archive::Zip::Tree;
my $zip = Archive::Zip->new();
# add all readable files  and  directories  below  .  as
xyz/*
$zip->addTree( '.', 'xyz' );
# add all readable plain files below /abc as /def/*
$zip->addTree( '/abc', '/def', sub { -f && -r } );
# add all .c files below /tmp as stuff/*
$zip->addTreeMatching( '/tmp', 'stuff', '.c$' );
#  add all .o files below /tmp as stuff/* if they aren't
writable
$zip->addTreeMatching( '/tmp', 'stuff', '.o$', sub  {  !
-w } );
# and write them into a file
$zip->writeToFileNamed('xxx.zip');
# now extract the same files into /tmpx
$zip->extractTree( 'stuff', '/tmpx' );

METHODS

$zip->addTree( $root, $dest [,$pred] )
$root is the root of the tree of files and directories
to be added
$dest is the name for the root in the zip file (undef
or blank means to use relative pathnames)
$pred is an optional subroutine reference to select
files: it is passed the name of the prospective file
or directory using $_, and if it returns true, the
file or directory will be included. The default is to
add all readable files and directories.
For instance, using

my $pred = sub { /.txt/ };
$zip->addTree( '.', '.', $pred );
will add all the .txt files in and below the current
directory, using relative names, and making the names
identical in the zipfile:

original name zip member name
./xyz xyz
./a/ a/
./a/b a/b
To use absolute pathnames, just pass them in:
$zip->addTree( '/a/b', '/a/b' );

original name zip member name
/a/ /a/
/a/b /a/b
To translate relative to absolute pathnames, just pass
them in:
$zip->addTree( '.', '/c/d' );

original name zip member name
./xyz /c/d/xyz
./a/ /c/d/a/
./a/b /c/d/a/b
To translate absolute to relative pathnames, just pass
them in:
$zip->addTree( '/c/d', 'a' );

original name zip member name
/c/d/xyz a/xyz
/c/d/a/ a/a/
/c/d/a/b a/a/b
Returns AZ_OK on success.
Note that this will not follow symbolic links to
directories.
Note also that this does not check for the validity of
filenames.
$zip->addTreeMatching( $root, $dest, $pattern [,$pred] )
$root is the root of the tree of files and directories
to be added
$dest is the name for the root in the zip file (undef
means to use relative pathnames)
$pattern is a (non-anchored) regular expression for
filenames to match
$pred is an optional subroutine reference to select
files: it is passed the name of the prospective file
or directory in $_, and if it returns true, the file
or directory will be included. The default is to add
all readable files and directories.
To add all files in and below the current dirctory
whose names end in ".pl", and make them extract into a
subdirectory named "xyz", do this:

$zip->addTreeMatching( '.', 'xyz', '.pl$' )
To add all writable files in and below the dirctory named "/abc" whose names end in ".pl", and make them
extract into a subdirectory named "xyz", do this:

$zip->addTreeMatching( '/abc', 'xyz', '.pl$', sub {
-w } )
Returns AZ_OK on success.
Note that this will not follow symbolic links to
directories.
$zip->extractTree()
$zip->extractTree( $root, $dest )
If you don't give any arguments at all, will extract
all the files in the zip with their original names.
If you give arguments, "extractTree" extracts all the
members below a given root. Will translate that root
to a given dest pathname.
For instance,

$zip->extractTree( '/a/', 'd/e/' );
when applied to a zip containing the files:
/a/x /a/b/c /d/e
will extract:
/a/x to d/e/x
/a/b/c to d/e/b/c
and ignore /d/e

AUTHOR

Ned Konz, perl@bike-nomad.com

COPYRIGHT

Copyright (c) 2000 Ned Konz. All rights reserved. This
program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.

SEE ALSO

Compress::Zlib Archive::Zip
Copyright © 2010-2025 Platon Technologies, s.r.o.           Home | Man pages | tLDP | Documents | Utilities | About
Design by styleshout