Eu normalmente uso esse estilo de comando para executar grep
em vários arquivos:
find / -xdev -type f -print0 | xargs -0 grep -H "800x600"
O que isso realmente faz é fazer uma lista de todos os arquivos no sistema, e então, para cada arquivo, executar grep
com os argumentos dados e o nome de cada arquivo.
O argumento -xdev
informa que ele deve ignorar outros sistemas de arquivos - isso é bom para evitar sistemas de arquivos especiais como /proc
. No entanto, ele também irá ignorar os sistemas de arquivos normais - portanto, se, por exemplo, sua pasta / home estiver em uma partição diferente, ela não será pesquisada - você precisará informar find / /home -xdev ...
.
-type f
significa procurar apenas por arquivos, portanto, diretórios, dispositivos e outros arquivos especiais são ignorados (ele ainda vai recorrer a diretórios e executar grep
nos arquivos dentro - ele não executará grep
no próprio diretório, que não funcionaria de qualquer maneira). E a opção -H
para grep
diz para sempre imprimir o nome do arquivo em sua saída.
find
aceita todos os tipos de opções para filtrar a lista de arquivos. Por exemplo, -name '*.txt'
processa apenas arquivos terminados em .txt. -size -2M
significa arquivos menores que 2 megabytes. -mtime -5
significa arquivos modificados nos últimos cinco dias. Junte-os junto com -a para e e -o para ou , e use '('
parênteses ')'
para agrupar expressões (entre aspas para evitar que o shell as interprete ). Então, por exemplo:
find / -xdev '(' -type f -a -name '*.txt' -a -size -2M -a -mtime -5 ')' -print0 | xargs -0 grep -H "800x600"
Dê uma olhada em man find
para ver a lista completa de possíveis filtros.