Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Adding files to Archive::Tar

by btrott (Parson)
on Mar 17, 2001 at 01:02 UTC ( #65027=snippet: print w/ replies, xml ) Need Help??

Description: This is a routine I've used in the past to add files to an Archive::Tar object (in the process of creating a tar archive). My objective was to get relative paths in the archive, rather than paths from the root.

Usage:

my $tar = Archive::Tar->new; add_to_tar($tar, $thing_to_add, $base_dir); $tar->write($gz, 9);
$thing_to_add can be either a file or a directory.

$base_dir is the key to relative paths. For example, say I had a directory directory '/foo/bar', and in that directory is another directory 'baz'. I can do something like this:

add_to_tar($tar, 'baz', '/foo/bar');
Alternatively, the second directory could contain the full path:
add_to_tar($tar, '/foo/bar/baz', '/foo/bar');
Hope this is useful.
    sub add_to_tar {
        my($tar, $thing, $base) = @_;

        if (defined $base) {
            chdir $base or die "Can't chdir to $base: $!";
            $thing =~ s!^$base/?!!;
        }

        if (-f $thing) {
            $tar->add_files($thing);
        }
        elsif (-d $thing) {
            my $code = sub {
                return if !-f $_;

                local *FH;
                open FH, $_ or die "Can't open $_: $!";
                binmode FH;
                my $c = do { local $/; <FH> };
                close FH or die "Can't close $_: $!";

                $tar->add_data($File::Find::name, $c);
            };
            find $code, $thing;
        }
    }
Comment on Adding files to Archive::Tar
Download Code
Replies are listed 'Best First'.
Re: Adding files to Archive::Tar
by Anonymous Monk on Nov 30, 2011 at 22:16 UTC
    Hey, you made my day! Thank you so much!

Back to Snippets Section

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://65027]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (6)
As of 2015-07-30 06:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (270 votes), past polls