Trabajando con xenserver, y quiero ejecutar un comando en cada archivo que está en un directorio, sacando algunas cosas de la salida del comando y anexándolo en un archivo.
Tengo claro el comando que quiero usar y cómo extraer las cadenas según sea necesario.
Pero lo que no tengo claro es cómo debo ejecutar este comando en cada archivo, pasando al siguiente, hasta que no se encuentren más archivos.
grep $PATTERN *.cpp *.h
. Si necesita reglas más específicas para los archivos que deben seleccionarse, use elfind
comando (verifique la respuesta de Rob).grep -r x .
resultados provienen de todos los archivos de todas las extensiones. Si corro,grep -r x *.scss
no recibo ningún resultado.*.scss
archivos en el directorio actual pero en algún lugar más profundo en subdirectorios para que grep no busque en todos los archivos que desea. Debe usar la--include
opción para indicarle a grep que busque de forma recursiva archivos que coincidan con patrones específicos:grep -r x --include '*.scss' .
(tenga en cuenta las comillas, evitan que el shell expanda el patrón). O simplemente usefind
(vea la respuesta de Rob).En Linux, normalmente uso este comando para greps recursivamente para un texto en particular dentro de un directorio
dónde,
r = recursivo, es decir, buscar subdirectorios dentro del directorio actual
n = para imprimir los números de línea en stdout
i = búsqueda sin distinción entre mayúsculas y minúsculas
fuente
Usa find. En serio, es la mejor manera porque entonces realmente puedes ver en qué archivos está funcionando:
Tenga en cuenta que -H es específico de mac, muestra el nombre del archivo en los resultados.
fuente
xargs
lugar de usar-exec
esto será mucho más rápido, ya que-exec
genera un nuevo proceso para cada grep, y la sobrecarga se vuelve significativa con una gran cantidad de archivos. Se aplican advertencias estándar sobre espacios en los nombres de archivoxargs
.xargs
sintaxis.find . -iname "*.sql" -print0 | xargs -0 grep "slow"
Para buscar en todos los subdirectorios, pero solo en tipos de archivo específicos , use grep con
--include
.Por ejemplo, buscando recursivamente en el directorio actual, para texto en * .yml y * .yaml:
fuente
Si quieres hacer múltiples comandos, puedes usar:
fuente