Procurar com grep e find
O grep procura dentro dos arquivos, pelo conteúdo; o find procura os arquivos pela ficha deles, como nome, tamanho e data.
Numa pasta com centenas de arquivos, abrir um por um não dá. Há duas perguntas diferentes, e um comando para cada:
- O que está escrito? O
greplê o conteúdo e mostra as linhas que têm um texto. - Qual é o arquivo? O
findolha a ficha de cada arquivo (nome, tamanho, data da última modificação) sem abrir nenhum.
Um exemplo, numa pasta sitio/ com anotações de vários anos:
$ grep -ri "chave do trator" sitio
sitio/notas/compras.txt:chave do trator: no prego da porta
sitio/velhos/rascunho.txt:CHAVE DO TRATOR: com o vizinho
-r(recursive) entra em todas as subpastas.-iignora a diferença entre maiúsculas e minúsculas. Sem ele, a segunda linha não apareceria.-lmostra só o nome dos arquivos;-nmostra o número da linha.
As aspas juntam as palavras num argumento só, o texto procurado.
Qual das duas anotações é a mais nova? O conteúdo não diz, mas a ficha diz. ls -l mostra a data em que cada arquivo foi modificado pela última vez (ls -lt já ordena do mais novo para o mais velho):
$ ls -l sitio/notas/compras.txt sitio/velhos/rascunho.txt
-rw-r--r-- 1 ana ana 61 Mar 3 2024 sitio/notas/compras.txt
-rw-r--r-- 1 ana ana 48 Sep 12 14:05 sitio/velhos/rascunho.txt
(Arquivo de mais de seis meses atrás aparece com o ano; os recentes, com a hora.) O find faz a mesma pergunta para a pasta inteira de uma vez:
$ find sitio -type f -newermt 2026-09-01
sitio/velhos/rascunho.txt
Os filtros mais usados do find:
| Filtro | Acha |
|---|---|
-name "*.txt" |
nome que combina com o padrão (-iname ignora maiúsculas) |
-type f, -type d |
só arquivos, só pastas |
-size +100k |
maior que 100 KB (-size -1k: menor que 1 KB) |
-newermt 2026-09-01 |
modificado depois do começo desse dia |
! -newermt 2026-09-08 |
modificado antes do começo desse dia (o ! nega o filtro) |
Filtros escritos juntos valem ao mesmo tempo. O * no -name é um curinga: qualquer sequência de caracteres.
Os dois se combinam: o resultado do find é uma lista de caminhos, e find sitio -type f -newermt 2026-09-01 -exec grep -i "chave" {} + procura o texto só nos arquivos daquele período.
Em Python, os dois viram um laço sobre pathlib.Path("sitio").rglob("*"): o grep testa "chave do trator" in linha.lower() em cada linha, e o find olha p.stat().st_size e p.stat().st_mtime.