Sindbad~EG File Manager

Current Path : /usr/bin/
Upload File :
Current File : //usr/bin/cpio-filter

#!/usr/bin/perl

use Archive::Cpio;
use Getopt::Long;

=head1 NAME

cpio-filter - transform a cpio archive

=head1 SYNOPSIS

    cpio-filter [--exclude <PATTERN>] [--in-place] [<cpio file>]

=head1 DESCRIPTION

Transform a cpio archive on the fly. Reads on stdin and output on stderr

=head1 AUTHOR

Pascal Rigaux <pixel@mandriva.com>

=cut

my %options = (
    'exclude=s' => \ (my $exclude), 
    'in-place|i' => \ (my $in_place),
);

sub usage {
    die "usage: cpio-filter [--exclude <PATTERN>] [--in-place] [<cpio file>]\n";
}

GetOptions(%options) or usage();
@ARGV <= 1 or usage();

if ($in_place) {
    @ARGV or die "you can't use --in-place without giving a cpio file\n";
}

my ($file) = @ARGV;

sub exclude {
    my ($e) = @_;
    $exclude && $e->name =~ m!(^|/)${exclude}($|/)!;
}

my $cpio = Archive::Cpio->new;
if ($in_place) {
    $cpio->read($file);
    $cpio->remove(map { exclude($_) ? $_->name : () } $cpio->get_files);
    $cpio->write($file);
} else {
    my $IN;
    if ($file) {
	open($IN, '<', $file) or die "can't open $file: $!\n";
    } else {
	$IN = \*STDIN;
    }

    $cpio->read_with_handler($IN, sub {
        my ($e) = @_;
	$cpio->write_one(\*STDOUT, $e) if !exclude($e);
    });
    $cpio->write_trailer(\*STDOUT);
}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists