Pular para o conteúdo
Todos os conceitos

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 grep lê o conteúdo e mostra as linhas que têm um texto.
  • Qual é o arquivo? O find olha 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.
  • -i ignora a diferença entre maiúsculas e minúsculas. Sem ele, a segunda linha não apareceria.
  • -l mostra só o nome dos arquivos; -n mostra 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.

grep: o conteúdo grep -ri "chave do trator" sitio - comprar sal mineral chave do trator: no prego da porta - ferrar o tordilho abre cada arquivo e mostra a linha find: a ficha find sitio -type f -newermt 2026-09-01 nome tamanho data rascunho.txt 48 bytes 2026-09-12 não abre o arquivo: lê nome, tamanho e data
O grep abre cada arquivo e mostra as linhas que têm o texto procurado; o find não abre nada e filtra pela ficha do arquivo: nome, tamanho e data de modificação.

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.

Aparece nestes desafios