/
usr
/
local
/
bin
/
/usr/local/bin
mkdir
upload
Name
Size
Mode
Actions
config_data
7138
0555
edit
dl
rm
crc32
1043
0555
edit
dl
rm
crontab
3320736
0755
edit
dl
rm
drush
6138646
0755
edit
dl
rm
drush.phar
6138646
0755
edit
dl
rm
ea-php72
5815400
0755
edit
dl
rm
ea-php73
5647288
0755
edit
dl
rm
ea-php74
6383296
0755
edit
dl
rm
ea-php80
7986080
0755
edit
dl
rm
ea-php81
8098952
0755
edit
dl
rm
ea_convert_php_ini
40811
0755
edit
dl
rm
ea_current_to_profile
11519
0755
edit
dl
rm
ea_install_profile
7274
0755
edit
dl
rm
ea_sync_user_phpini_settings
6888
0755
edit
dl
rm
htmltree
1173
0555
edit
dl
rm
instmodsh
4194
0555
edit
dl
rm
ipcount
3724
0555
edit
dl
rm
iptab
982
0555
edit
dl
rm
json_pp
3828
0555
edit
dl
rm
json_xs
7013
0555
edit
dl
rm
lsphp
937
0755
edit
dl
rm
lwp-download
8635
0555
edit
dl
rm
lwp-dump
2797
0555
edit
dl
rm
lwp-mirror
2478
0555
edit
dl
rm
lwp-request
15059
0555
edit
dl
rm
mech-dump
4623
0555
edit
dl
rm
passwd
3768664
0755
edit
dl
rm
pear
935
0755
edit
dl
rm
php
933
0755
edit
dl
rm
php-config
6384
0755
edit
dl
rm
prove
13457
0555
edit
dl
rm
ptar
3456
0555
edit
dl
rm
ptardiff
2535
0555
edit
dl
rm
ptargrep
4299
0555
edit
dl
rm
shasum
9287
0555
edit
dl
rm
tpage
8923
0555
edit
dl
rm
ttree
39234
0555
edit
dl
rm
wp
6928461
0755
edit
dl
rm
wp-cli.phar
6928461
0755
edit
dl
rm
zipdetails
48366
0555
edit
dl
rm
Edit:
/usr/local/bin/ptargrep
(4299B)
#!/usr/bin/perl ############################################################################## # Tool for using regular expressions against the contents of files in a tar # archive. See 'ptargrep --help' for more documentation. # BEGIN { pop @INC if $INC[-1] eq '.' } use strict; use warnings; use Pod::Usage qw(pod2usage); use Getopt::Long qw(GetOptions); use Archive::Tar qw(); use File::Path qw(mkpath); my(%opt, $pattern); if(!GetOptions(\%opt, 'basename|b', 'ignore-case|i', 'list-only|l', 'verbose|v', 'help|?', )) { pod2usage(-exitval => 1, -verbose => 0); } pod2usage(-exitstatus => 0, -verbose => 2) if $opt{help}; pod2usage(-exitval => 1, -verbose => 0, -message => "No pattern specified", ) unless @ARGV; make_pattern( shift(@ARGV) ); pod2usage(-exitval => 1, -verbose => 0, -message => "No tar files specified", ) unless @ARGV; process_archive($_) foreach @ARGV; exit 0; sub make_pattern { my($pat) = @_; if($opt{'ignore-case'}) { $pattern = qr{(?im)$pat}; } else { $pattern = qr{(?m)$pat}; } } sub process_archive { my($filename) = @_; _log("Processing archive: $filename"); my $next = Archive::Tar->iter($filename); while( my $f = $next->() ) { next unless $f->is_file; match_file($f) if $f->size > 0; } } sub match_file { my($f) = @_; my $path = $f->name; my $prefix = $f->prefix; if (defined $prefix) { $path = File::Spec->catfile($prefix, $path); } _log("filename: %s (%d bytes)", $path, $f->size); my $body = $f->get_content(); if($body !~ $pattern) { _log(" no match"); return; } if($opt{'list-only'}) { print $path, "\n"; return; } save_file($path, $body); } sub save_file { my($path, $body) = @_; _log(" found match - extracting"); my($fh); my($dir, $file) = $path =~ m{\A(?:(.*)/)?([^/]+)\z}; if($dir and not $opt{basename}) { _log(" writing to $dir/$file"); $dir =~ s{\A/}{./}; mkpath($dir) unless -d $dir; open $fh, '>', "$dir/$file" or die "open($dir/$file): $!"; } else { _log(" writing to ./$file"); open $fh, '>', $file or die "open($file): $!"; } print $fh $body; close($fh); } sub _log { return unless $opt{verbose}; my($format, @args) = @_; warn sprintf($format, @args) . "\n"; } __END__ =head1 NAME ptargrep - Apply pattern matching to the contents of files in a tar archive =head1 SYNOPSIS ptargrep [options] <pattern> <tar file> ... Options: --basename|-b ignore directory paths from archive --ignore-case|-i do case-insensitive pattern matching --list-only|-l list matching filenames rather than extracting matches --verbose|-v write debugging message to STDERR --help|-? detailed help message =head1 DESCRIPTION This utility allows you to apply pattern matching to B<the contents> of files contained in a tar archive. You might use this to identify all files in an archive which contain lines matching the specified pattern and either print out the pathnames or extract the files. The pattern will be used as a Perl regular expression (as opposed to a simple grep regex). Multiple tar archive filenames can be specified - they will each be processed in turn. =head1 OPTIONS =over 4 =item B<--basename> (alias -b) When matching files are extracted, ignore the directory path from the archive and write to the current directory using the basename of the file from the archive. Beware: if two matching files in the archive have the same basename, the second file extracted will overwrite the first. =item B<--ignore-case> (alias -i) Make pattern matching case-insensitive. =item B<--list-only> (alias -l) Print the pathname of each matching file from the archive to STDOUT. Without this option, the default behaviour is to extract each matching file. =item B<--verbose> (alias -v) Log debugging info to STDERR. =item B<--help> (alias -?) Display this documentation. =back =head1 COPYRIGHT Copyright 2010 Grant McLean E<lt>grantm@cpan.orgE<gt> This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut
Save
cmd:
run