I have some file structure which contains projects with build folders at various depths. I’m trying to use zsh (extended) globbing to exclude files in build folders.
I tried using the following command and many other variants:
grep "string" (^build/)#
I’m reading this as “Any folder that doesn’t match build
0 or more times.”
However I’m still getting results from folders such as:
./ProjectA/build/…/file.mi
./ProjectB/package/build/…/file2.mi
Any suggestions?
Advertisement
Answer
This should work:
grep string (^build/)#*(.)
Explanation:
^build
: anything not namedbuild
^build/
: any directory not named build. It will not match any other file type(^build/)#
: any directory path consisting out of elements that are not namedbuild
. Again, this will not match a path where the last element is not a directory(^build/)#*
: Any path where all but the last element must not be namedbuild
. This will also list files. It also assumes that it would be ok, if the file itself were namedbuild
. If that is not the case you have to use(^build/)#^build
(^build/)#*(.)
: Same as before, but restricted to only match normal files by the glob qualifier(.)