tracefile: added --file.

This commit is contained in:
Ole Tange 2017-04-28 21:06:31 +02:00
parent 028d0520cf
commit 9e5ed8416d
2 changed files with 37 additions and 19 deletions

22
README
View file

@ -2,6 +2,8 @@ Tools developed by Ole Tange <ole@tange.dk>.
Probably not useful for you, but then again you never now. Probably not useful for you, but then again you never now.
blink - blink disks in a disk enclosure
bsearch - binary search through sorted text files. bsearch - binary search through sorted text files.
em - Force emacs to run in terminal. Use xemacs if installed. em - Force emacs to run in terminal. Use xemacs if installed.
@ -10,32 +12,40 @@ field - Split on space. Give the given field number. Supports syntax 1-3,6-
forever - Run the same command or list of commands every second. forever - Run the same command or list of commands every second.
G - short hand for multi level grep. G - shorthand for multi level grep.
gitnext - Checkout next revision. Opposite of 'checkout HEAD^'. gitnext - Checkout next revision. Opposite of 'checkout HEAD^'.
gitundo - Undo last commit. histogram - make and display a histogram on the command line.
neno - No error no output. Only print STDERR and STDOUT if the command fails. neno - No error no output. Only print STDERR and STDOUT if the command fails.
puniq - Print unique lines the first time they are seen.
pdfman - Convert man page to pdf and display it using evince. pdfman - Convert man page to pdf and display it using evince.
rand - Generate (pseudo-)random data puniq - Print unique lines the first time they are seen.
ramusage - Display the ram usage of a program using `time -v`.
rand - Generate (pseudo-)random data.
rclean - Remove files with MD5 sums recorded by rrm (see below). rclean - Remove files with MD5 sums recorded by rrm (see below).
reniced - Renice all commands running more than 1 CPU minute unless they are niced or whitelisted. reniced - Renice all commands running more than 1 CPU minute unless they are niced or whitelisted.
rn - Move file(s)/dir(s) to ~/.rm/ (wastebasket). rn - Move file(s)/dir(s) to .rm/ (wastebasket).
rrm - Record file's MD5 sum before removing it. rrm - Record file's MD5 sum before removing it.
stdout - Redirect both STDERR and STDOUT to STDOUT. stdout - Redirect both STDERR and STDOUT to STDOUT.
T - tee stdout to and from temporary files.
timestamp - prepend timestamp to output.
tracefile - List files/dirs being accessed by program. tracefile - List files/dirs being accessed by program.
upsidedown - flip input upside down.
w4it-for-port-open - Block until the given port opens on a given host. w4it-for-port-open - Block until the given port opens on a given host.
wastebasket - VLC extension for moving current file to a wastebasket wastebasket - VLC extension for moving current file to a wastebasket

View file

@ -6,9 +6,9 @@ tracefile - list files being accessed
=head1 SYNOPSIS =head1 SYNOPSIS
B<tracefile> [-adenu] I<command> B<tracefile> [-adefnu] I<command>
B<tracefile> [-adenu] -p I<pid> B<tracefile> [-adefnu] -p I<pid>
=head1 DESCRIPTION =head1 DESCRIPTION
@ -44,6 +44,13 @@ List only dirs.
List only existing files. List only existing files.
=item B<-f>
=item B<--file>
List only files.
=item B<-n> =item B<-n>
=item B<--nonexist> =item B<--nonexist>
@ -81,7 +88,8 @@ know which one.
Here B<ls> tries to find B</usr/include/shisa.h>. If it fails, Here B<ls> tries to find B</usr/include/shisa.h>. If it fails,
B<apt-file> will search for which package it is in: B<apt-file> will search for which package it is in:
tracefile -n -u ls /usr/include/shisa.h | apt-file -f search - tracefile -n -u ls /usr/include/shisa.h | apt-file -f search - |
grep /usr/include/shisa.h
=head1 REPORTING BUGS =head1 REPORTING BUGS
@ -90,7 +98,7 @@ Report bugs to <tange@gnu.org>.
=head1 AUTHOR =head1 AUTHOR
Copyright (C) 2012,2016 Ole Tange, http://ole.tange.dk and Free Copyright (C) 2012,2016,2017 Ole Tange, http://ole.tange.dk and Free
Software Foundation, Inc. Software Foundation, Inc.
@ -220,7 +228,7 @@ $Global::progname = "tracefile";
Getopt::Long::Configure("bundling","pass_through"); Getopt::Long::Configure("bundling","pass_through");
get_options_from_array(\@ARGV) || die_usage(); get_options_from_array(\@ARGV) || die_usage();
if(not ($opt::exists or $opt::nonexists or $opt::all or $opt::dir)) { if(not ($opt::exists or $opt::nonexists or $opt::all or $opt::dir or $opt::file)) {
$opt::all = 1; $opt::all = 1;
} }
@ -240,17 +248,16 @@ while(<IN>) {
my $file = shell_unquote($1); my $file = shell_unquote($1);
# Relative to $dir # Relative to $dir
$file =~ s:^([^/]):$dir/$1:; $file =~ s:^([^/]):$dir/$1:;
my $print = 0; my $print = 1;
if($opt::all if(($opt::dir and not -d $file)
or or
($opt::exists and -e $file) ($opt::file and not -f $file)
or or
($opt::dir and -d $file) ($opt::exists and not -e $file)
or or
($opt::nonexists and not -e $file)) { ($opt::nonexists and -e $file)
$print = 1; or
} ($opt::unique and $seen{$file}++)) {
if($opt::unique and $seen{$file}++) {
$print = 0; $print = 0;
} }
$print and print $file,"\n"; $print and print $file,"\n";
@ -262,6 +269,7 @@ sub options_hash {
return return
("debug|D" => \$opt::debug, ("debug|D" => \$opt::debug,
"dir|d" => \$opt::dir, "dir|d" => \$opt::dir,
"file|f" => \$opt::file,
"uniq|unique|u" => \$opt::unique, "uniq|unique|u" => \$opt::unique,
"exists|exist|e" => \$opt::exists, "exists|exist|e" => \$opt::exists,
"nonexists|nonexist|non-exists|non-exist|n" => \$opt::nonexists, "nonexists|nonexist|non-exists|non-exist|n" => \$opt::nonexists,