diff options
author | Ori Bernstein <ori@eigenstate.org> | 2020-11-21 21:23:46 -0800 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2020-11-21 21:23:46 -0800 |
commit | 97008caa4174cee3dd849d9962c529897717e333 (patch) | |
tree | 34beeece6eadfc2d7b02f5ad78b31dbf0c5064fb /rc | |
parent | d1dc287210afd73705c21675dcbaa4eaf997fdde (diff) | |
download | plan9front-97008caa4174cee3dd849d9962c529897717e333.tar.xz |
g: filter directory arguments
When searching directories recursively, it's still
desirable to filter the contents by the file pattern,
so that 'g foo /sys/src' doesn't end up searching for
foo within .$O files.
Files passed explicitly are still searched, so for the
old behavior, just use walk:
g foo `{walk -f $dir}
Diffstat (limited to 'rc')
-rwxr-xr-x | rc/bin/g | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -14,18 +14,24 @@ while(! ~ $#* 1 && ~ $1 -* && ! ~ $1 --){ if(~ $1 --) shift +suffixes='\.([bcChlmsy]|asm|awk|cc|cgi|cpp|cs|go|goc|hs|java|lx|ms|pl|py|rc|tex|xy)$' +fullnames='(^|/)mkfile$' switch($#*){ case 0 echo 'usage: g [flags] pattern [files]' >[1=2] exit usage case 1 pattern=$1 - fullnames='mkfile$' - suffixes='\.([bcChlmsy]|asm|awk|cc|cgi|cpp|cs|go|goc|hs|java|lx|ms|pl|py|rc|tex|xy)$' files=`$nl{walk -f $recurse | grep -e $fullnames -e $suffixes >[2]/dev/null} case * pattern=$1 shift - files=`$nl{walk -f $recurse -- $*} + for(f in $*){ + if(test -d $f) + files=($files `$nl{walk -f $recurse -- $* \ + | grep -e $fullnames -e $suffixes >[2]/dev/null}) + if not + files=$(files $f) + } } grep -n $flags -- $pattern $files /dev/null |