Puede parecer que estoy haciendo lo mismo que esta pregunta , pero tengo requisitos diferentes. Este es un ejemplo de mi sistema de archivos:
- /código/
- interno/
- dev /
- principal/
- público/
- dev /
- principal/
- lanzamiento/
- herramientas/
- interno/
/code/internal/dev/, /code/public/dev/Y /code/tools/contener subdirectorios para varios proyectos. Trabajo casi exclusivamente en las ramas de desarrollo de /code/internal/y /code/public/, y a menudo quiero buscar una cadena de texto en esos directorios junto con /code/tools/(que no tiene ramas). En estos casos, tengo que hacer tres comandos separados:
$ grep -r "some string" /code/internal/dev/
$ grep -r "some string" /code/public/dev/
$ grep -r "some string" /code/tools/
Me gustaría saber si hay un solo comando para hacer esto. De lo contrario, lo más probable es que necesite escribir un script bash simple.

grep: /code/internal/dev/*.cs: No such file or directorymenos que elimine*.csel comando. Esto es mi culpa porque puse el*.csen mi pregunta originalmente.Si desea aprovechar al máximo los comodines (y la jerarquía que publicó está completa), puede hacerlo
Explicación:
El primer paso realizado es la expansión de la lista de llaves.
foo{bar,baz}quxse expande afoobarqux foobazqux. Es decir, se genera una palabra separada para cada elemento separado por comas en la lista, con el prefijo y la parte de postfix adjunta a cada uno. Puedes ver cómo funciona haciendoque salidas
Tenga en cuenta que esto también funciona con llaves múltiples, y también con argumentos vacíos; por ejemplo
da
Entonces, después de la expansión de llaves, su comando se ve así:
El siguiente paso es la expansión de comodines. Ya lo sabe para la
*.csparte, pero también funciona para directorios intermedios; además, si a/sigue, solo los directorios coinciden. Por lo tanto, dada su jerarquía (y la composición de los nombres de los.csarchivos), obtendrá el comando:Solo después de que todo esto haya sucedido,
grepse llama con esta lista de argumentos (tenga en cuenta que lo mismo sucede con sus comandos originales;grepnunca llega a ver el*; la expansión se realiza completamentebashantes de llamargrep).fuente