Uno de mis comandos BASH favoritos es:
find . -name '*.*' -exec grep 'SearchString' {} /dev/null \;
que busca el contenido de todos los archivos en y debajo del directorio actual para el SearchString especificado. Como desarrollador, esto ha sido útil a veces.
Sin embargo, debido a mi proyecto actual y la estructura de mi base de código, me gustaría hacer que este comando BASH sea aún más avanzado al no buscar ningún archivo que esté dentro o debajo de un directorio que contenga ".svn", o cualquier archivo que termina con ".html"
Sin embargo, la página de MAN para encontrar me confundió un poco. Intenté usar -prune, y me dio un comportamiento extraño. En un intento de omitir solo las páginas .html (para comenzar), intenté:
find . -wholename './*.html' -prune -exec grep 'SearchString' {} /dev/null \;
y no obtuve el comportamiento que esperaba. Creo que podría estar perdiendo el punto de -prune. podrían ustedes ayudarme?
Gracias
grep -rl 'SearchString'
find
para buscar dentro de un archivo.
-name '*.*'
no encuentra todos los archivos: solo aquellos con un .
en su nombre (el uso de *.*
es típicamente un DOS-ismo, mientras que en Unix, normalmente se usa solo *
para eso). Para hacer coincidir realmente a todos, basta con retirar por completo el argumento: find . -exec ...
. O si solo desea aplicar grep a los archivos (y omitir directorios), entonces hágalo find . -type f -exec ...
.
find
no es un comando bash