]> git.lizzy.rs Git - plan9front.git/commitdiff
g: filter directory arguments
authorOri Bernstein <ori@eigenstate.org>
Sun, 22 Nov 2020 05:23:46 +0000 (21:23 -0800)
committerOri Bernstein <ori@eigenstate.org>
Sun, 22 Nov 2020 05:23:46 +0000 (21:23 -0800)
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}

rc/bin/g

index d400b1c9385b01adfc1d29ab93f87995931f065b..8bfb1135d6c23a9310d378d369724877594454f0 100755 (executable)
--- 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