summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOri Bernstein <ori@eigenstate.org>2020-11-21 21:23:46 -0800
committerOri Bernstein <ori@eigenstate.org>2020-11-21 21:23:46 -0800
commit97008caa4174cee3dd849d9962c529897717e333 (patch)
tree34beeece6eadfc2d7b02f5ad78b31dbf0c5064fb
parentd1dc287210afd73705c21675dcbaa4eaf997fdde (diff)
downloadplan9front-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}
-rwxr-xr-xrc/bin/g12
1 files changed, 9 insertions, 3 deletions
diff --git a/rc/bin/g b/rc/bin/g
index d400b1c93..8bfb1135d 100755
--- a/rc/bin/g
+++ b/rc/bin/g
@@ -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