Recursively archive a directory (using libarchive)
use Archive::Libarchive::Compress;
my $w = Archive::Libarchive::Compress->new( filename => 'foo.tar' );
$w->compress( from => '.' );
This module recursively archives a directory to either a file or to memory. This module does not store directory structure, just the files, so an empty directory will not be represented in the resulting archive.
my $w = Archive::Libarchive::Compress->new(%args);
Exactly one of filename
and memory
are required. All other
arguments are optional.
-
entry
Callback function called for each entry before it is written to the archive. The entry is passed in as an instance of Archive::Libarchive::Entry. If this callback returns a false value, then the entry will not be written to the archive.
my $w = Archive::Libarchive::Compress->new( filename => 'foo.tar', entry => sub ($e) { # skip "hidden" files return $e->pathname !~ /^\./; }, )
You may also modify the entry, before it gets written. This can be useful for modifying stored file properties like the owner, group or permissions that you may not want in the archive.
-
filename
The name of the archive filename to create.
-
memory
Scalar reference which will be used as a buffer to write the archive to memory. This scalar does not have to be pre-allocated, so this will work:
my $out = ''; my $w = Archive::Libarchive::Compress->new( memory => \$out );
-
prep
Callback function called before the archive has been opened. An instance of Archive::Libarchive::ArchiveWrite will be passed in. This is useful for specifying a format for the archive. If not provided, then pax restricted format will be used. (This is uncompressed and widely supported). If you wanted to for example use GNU tar format compressed with bzip2:
my $w = Archive::Libarchive::Compress->new( filename => 'foo.tar.bz2', prep => sub ($archive) { $archive->set_format_gnutar; $archive->add_filter_bzip2; }, );
See Archive::Libarchive::ArchiveWrite for more details.
my $filename = $w->filename;
Returns the Archive filename.
my $from = $w->from;
Returns the directory that was archived. If "compress" hasn't been called yet,
then it will return undef
.
$w->compress( from => $dir );
$w->compress;
Recursively archives the directory. If $dir
is not provided, then
the current directory will be used.
Graham Ollis [email protected]
This software is copyright (c) 2024 by Graham Ollis.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.