#!/usr/bin/perl
use strict;
+use warnings;
+BEGIN { pop @INC if $INC[-1] eq '.' }
use File::Find;
use Getopt::Std;
use Archive::Tar;
use Data::Dumper;
+# Allow historic support for dashless bundled options
+# tar cvf file.tar
+# is valid (GNU) tar style
+@ARGV && $ARGV[0] =~ m/^[DdcvzthxIC]+[fT]?$/ and
+ unshift @ARGV, map { "-$_" } split m// => shift @ARGV;
my $opts = {};
-getopts('Ddcvzthxf:IC', $opts) or die usage();
+getopts('Ddcvzthxf:ICT:', $opts) or die usage();
### show the help message ###
die usage() if $opts->{h};
my $file = $opts->{f} ? $opts->{f} : 'default.tar';
my $tar = Archive::Tar->new();
-
if( $opts->{c} ) {
my @files;
+ my @src = @ARGV;
+ if( $opts->{T} ) {
+ if( $opts->{T} eq "-" ) {
+ chomp( @src = <STDIN> );
+ } elsif( open my $fh, "<", $opts->{T} ) {
+ chomp( @src = <$fh> );
+ } else {
+ die "$0: $opts->{T}: $!\n";
+ }
+ }
+
find( sub { push @files, $File::Find::name;
- print $File::Find::name.$/ if $verbose }, @ARGV );
+ print $File::Find::name.$/ if $verbose }, @src );
if ($file eq '-') {
use IO::Handle;
=head1 NAME
- ptar - a tar-like program written in perl
+ptar - a tar-like program written in perl
=head1 DESCRIPTION
- ptar is a small, tar look-alike program that uses the perl module
- Archive::Tar to extract, create and list tar archives.
+ptar is a small, tar look-alike program that uses the perl module
+Archive::Tar to extract, create and list tar archives.
=head1 SYNOPSIS
ptar -c [-v] [-z] [-C] [-f ARCHIVE_FILE | -] FILE FILE ...
+ ptar -c [-v] [-z] [-C] [-T index | -] [-f ARCHIVE_FILE | -]
ptar -x [-v] [-z] [-f ARCHIVE_FILE | -]
ptar -t [-z] [-f ARCHIVE_FILE | -]
ptar -h
v Print filenames as they are added or extracted from ARCHIVE_FILE
h Prints this help message
C CPAN mode - drop 022 from permissions
+ T get names to create from file
=head1 SEE ALSO
- tar(1), L<Archive::Tar>.
+L<tar(1)>, L<Archive::Tar>.
=cut