NAME
Archive::Libarchive::Compress - Recursively archive a directory (using libarchive)
VERSION
version 0.01
SYNOPSIS
use Archive::Libarchive::Compress;
my $w = Archive::Libarchive::Compress->new( filename => 'foo.tar' );
$w->compress( from => '.' );
DESCRIPTION
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.
CONSTRUCTOR
new
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.
METHODS
filename
my $filename = $w->filename;
Returns the Archive filename.
from
my $from = $w->from;
Returns the directory that was archived. If "compress" hasn't been called yet, then it will return undef
.
compress
$w->compress( from => $dir );
$w->compress;
Recursively archives the directory. If $dir
is not provided, then the current directory will be used.
AUTHOR
Graham Ollis <plicease@cpan.org>
COPYRIGHT AND LICENSE
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.