Tar - module for manipulation of tar archives.
use Archive::Tar; $tar = Archive::Tar->new(); $tar->read("origin.tar.gz",1); $tar->add_files("file/foo.c", "file/bar.c"); $tar->add_data("file/baz.c","This is the file contents"); $tar->write("files.tar");
This is a module for the handling of tar archives.
At the moment these methods are implemented:
Returns a new Tar object. If given a filename as an argument, it will try to load that as a tar file. If given a true value as a second argument, will assume that the tar file is compressed, and will attempt to read it using Compress::Zlib.
Takes a list of filenames and adds them to the in-memory archive. I suspect that this function will produce bogus tar archives when used under MacOS, but I'm not sure and I have no Mac to test it on.
Takes a filename, a scalar full of data and optionally a reference to a hash with specific options. Will add a file to the in-memory archive, with name
$filename and content
$data. Specific options can be set using
$opthashref, which will be documented later.
Removes any entries with names matching any of the given filenames from the in-memory archive. String comparisons are done with
Try to read the given tarfile into memory. If the second argument is a true value, the tarfile is assumed to be compressed. Will replace any previous content in
Will write the in-memory archive to disk. If no filename is given, returns the entire formatted archive as a string, which should be useful if you'd like to stuff the archive into a socket or a pipe to gzip or something. If the second argument is true, the module will try to write the file compressed.
Returns the in-memory archive. This is a list of references to hashes, the internals of which is not currently documented.
Write files whose names are equivalent to any of the names in
@filenames to disk, creating subdirectories as neccesary. This might not work too well under VMS and MacOS.
Returns a list with the names of all files in the in-memory archive.
Return the content of the named file.
Make the string $content be the content for the file named $file.
Arrange to chmod() at the very end in case it makes the file readonly. Win32 is actually picky about that.
SunOS 4.x tar makes tarfiles that contain directory entries that don't have typeflag set properly. We use the trailing slash to recognize directories in such tarfiles.
Fixed (hopefully) broken portability to MacOS, reported by Paul J. Schinder at Goddard Space Flight Center.
Fixed two bugs with symlink handling, reported in excellent detail by an admin at teleport.com called Chris.
Primive tar program (called ptar) included with distribution. Useage should be pretty obvious if you've used a normal tar program.
Added methods get_content and replace_content.
Added support for paths longer than 100 characters, according to POSIX. This is compatible with just about everything except GNU tar. Way to go, GNU tar (use a better tar, or GNU cpio).
NOTE: When adding files to an archive, files with basenames longer than 100 characters will be silently ignored. If the prefix part of a path is longer than 155 characters, only the last 155 characters will be stored.
Added list_files() method, as requested by Michael Wiedman.
Fixed a couple of dysfunctions when run under Windows NT. Michael Wiedmann reported the bugs.
Changed the documentation to reflect reality a bit better.
Fixed bug in format_tar_entry. Bug reported by Michael Schilli.
Quoted lots of barewords to make
use strict; stop complaining under perl version 5.003.
Ties to Compress::Zlib put in. Will warn if it isn't available.
$tar->write() with no argument now returns the formatted archive.
Made changes to write_tar so that Solaris tar likes the resulting archives better.
Protected the calls to readlink() and symlink(). AFAIK this module should now run just fine on Windows NT.
Add method to write a single entry to disk (extract)
Added method to add entries entirely from scratch (add_data)
Changed name of add() to add_file()
All calls to croak() removed and replaced with returning undef and setting Tar::error.
Better handling of tarfiles with garbage at the end.