Normalmente uso este estilo de comando para ejecutar grep
varios archivos:
find / -xdev -type f -print0 | xargs -0 grep -H "800x600"
Lo que esto realmente hace es hacer una lista de cada archivo en el sistema, y luego para cada archivo, ejecutar grep
con los argumentos dados y el nombre de cada archivo.
El -xdev
argumento dice encontrar que debe ignorar otros sistemas de archivos; esto es bueno para evitar sistemas de archivos especiales como /proc
. Sin embargo, también ignorará los sistemas de archivos normales, por lo que si, por ejemplo, su carpeta / home está en una partición diferente, no se buscará, debería decir find / /home -xdev ...
.
-type f
significa buscar solo archivos, por lo que se ignoran los directorios, dispositivos y otros archivos especiales (aún se repetirá en los directorios y se ejecutará grep
en los archivos internos; simplemente no se ejecutará grep
en el directorio en sí, lo que no funcionaría de todos modos). Y la -H
opción grep
le dice que siempre imprima el nombre del archivo en su salida.
find
acepta todo tipo de opciones para filtrar la lista de archivos. Por ejemplo, -name '*.txt'
procesa solo archivos que terminan en .txt. -size -2M
significa archivos que son más pequeños que 2 megabytes. -mtime -5
significa archivos modificados en los últimos cinco días. Une estos con -a for y y -o for or , y usa '('
paréntesis ')'
para agrupar expresiones (entre comillas para evitar que el shell las interprete). Así por ejemplo:
find / -xdev '(' -type f -a -name '*.txt' -a -size -2M -a -mtime -5 ')' -print0 | xargs -0 grep -H "800x600"
Echa un vistazo man find
para ver la lista completa de posibles filtros.
Permission denied
errores? ¿Lo ejecutaste como root o como un usuario normal?