Normalmente, eu uso esse estilo de comando para executar grep
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, em seguida, para cada arquivo, executar grep
com os argumentos fornecidos e o nome de cada arquivo.
O -xdev
argumento diz que ele deve ignorar outros sistemas de arquivos - isso é bom para evitar sistemas de arquivos especiais, como /proc
. No entanto, ele também ignorará também os sistemas de arquivos normais - portanto, se, por exemplo, sua pasta / home estiver em uma partição diferente, ela não será pesquisada - você precisaria dizer find / /home -xdev ...
.
-type f
significa procurar apenas arquivos, para que diretórios, dispositivos e outros arquivos especiais sejam ignorados (ele ainda será executado novamente nos diretórios e será executado grep
nos arquivos contidos - apenas não será executado grep
no próprio diretório, o que não funcionaria de qualquer maneira). E a -H
opção 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 que terminam em .txt. -size -2M
significa arquivos menores que 2 megabytes. -mtime -5
significa arquivos modificados nos últimos cinco dias. Junte-os a -a for e -o for or e use '('
parênteses ')'
para agrupar expressões (entre aspas para impedir 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 man find
para ver a lista completa de possíveis filtros.
Permission denied
erros? Você o executou como root ou como usuário normal?