Pular para o conteúdo principal

Capítulo 3.6 - Busca de Arquivos

Objetivos de Aprendizagem​

Ao final deste capítulo, você será capaz de:

  • Utilizar o find de forma eficiente
  • Utilizar o locate para busca rápida
  • Buscar por conteúdo com grep
  • Combinar ferramentas de busca

find - Busca Poderosa​

Sintaxe Básica​

find [caminho] [critérios] [ações]

Busca por Nome​

# Por nome exato
find /home -name "fichier.txt"

# Insensível a maiúsculas/minúsculas
find /home -iname "fichier.txt"

# Padrões
find /home -name "*.txt"
find /home -name "file*"
find /home -name "*log*"

Busca por Tipo​

# Apenas arquivos
find /home -type f

# Apenas diretórios
find /home -type d

# Links simbólicos
find /home -type l

# Tipos especiais
find /dev -type b # Block devices
find /dev -type c # Character devices

Busca por Tamanho​

# Mais de 100MB
find /home -size +100M

# Menos de 1KB
find /home -size -1k

# Exatamente 50MB
find /home -size 50M

# Unidades: c (bytes), k, M, G

Busca por Data​

# Modificado na última semana
find /home -mtime -7

# Modificado há mais de 30 dias
find /home -mtime +30

# Modificado na última hora
find /home -mmin -60

# Por data de acesso
find /home -atime -7

# Por data de criação
find /home -ctime -7

Busca por Permissões​

# Arquivos executáveis
find /home -type f -perm /111

# Arquivos com permissões específicas
find /home -perm 644

# Arquivos sem permissão para outros
find /home ! -perm -o=r

Busca por Proprietário​

# Por usuário
find /home -user user1

# Por grupo
find /home -group developers

# Por UID/GID
find /home -uid 1000
find /home -gid 1000

Ações com find​

# Exibir (padrão)
find /home -name "*.txt"

# Executar um comando
find /home -name "*.txt" -exec ls -lh {} \;
find /home -name "*.txt" -exec rm {} \;

# Remover diretamente
find /home -name "*.tmp" -delete

# Copiar
find /home -name "*.txt" -exec cp {} /backup/ \;

# Com confirmação
find /home -name "*.txt" -ok rm {} \;

Combinações​

# Arquivos .log modificados na última semana, maiores que 10MB
find /var/log -name "*.log" -mtime -7 -size +10M

# Arquivos .txt pertencentes ao user1, executáveis
find /home -name "*.txt" -user user1 -perm /111

# Diretórios vazios
find /home -type d -empty

locate - Busca Rápida​

Utilização​

# Busca simples
locate fichier.txt

# Insensível a maiúsculas/minúsculas
locate -i fichier

# Limitar o número de resultados
locate -l 20 fichier

# Padrões
locate "*.txt"
locate "file*"

Atualização da Base​

# Atualizar a base de dados
sudo updatedb

# Ver as bases utilizadas
locate -S

Vantagens:

  • Muito rápido
  • Índice pré-construído

Desvantagens:

  • Requer updatedb regular
  • Pode não encontrar arquivos recentes

grep - Busca em Conteúdo​

Busca de Texto​

# Busca simples
grep "motif" fichier.txt

# Insensível a maiúsculas/minúsculas
grep -i "motif" fichier.txt

# Exibir números das linhas
grep -n "motif" fichier.txt

# Exibir apenas nomes dos arquivos
grep -l "motif" *.txt

# Busca recursiva
grep -r "motif" /home/user1/

# Busca inversa (linhas sem o padrão)
grep -v "motif" fichier.txt

Padrões Avançados​

# Expressões regulares
grep "^début" fichier.txt # Começa com
grep "fin$" fichier.txt # Termina com
grep "motif1\|motif2" fichier.txt # OU
grep "[0-9]" fichier.txt # Dígitos
grep "[a-z]" fichier.txt # Letras minúsculas

# Busca estendida
grep -E "motif1|motif2" fichier.txt

Opções Úteis​

# Contexto (linhas antes/depois)
grep -C 3 "motif" fichier.txt # 3 linhas antes/depois
grep -B 2 "motif" fichier.txt # 2 linhas antes
grep -A 2 "motif" fichier.txt # 2 linhas depois

# Contar ocorrências
grep -c "motif" fichier.txt

# Cores
grep --color=auto "motif" fichier.txt

Combinação de Ferramentas​

find + grep​

# Buscar em todos os arquivos .txt
find /home -name "*.txt" -exec grep -l "motif" {} \;

# Buscar e exibir com contexto
find /home -name "*.log" -exec grep -Hn "ERROR" {} \;

find + xargs​

# Mais eficiente que -exec
find /home -name "*.txt" | xargs grep "motif"
find /home -name "*.txt" -print0 | xargs -0 grep "motif"

Pipeline Complexo​

# Encontrar arquivos .log, buscar ERROR, contar
find /var/log -name "*.log" -exec grep "ERROR" {} \; | wc -l

# Encontrar arquivos modificados recentemente, buscar padrão
find /home -mtime -1 -type f -exec grep -l "motif" {} \;

which e whereis​

which​

Encontra o local de um comando:

which ls
which python
which git

whereis​

Encontra binário, fonte e man:

whereis ls
whereis python
# Exibe: binário, fonte, man pages

Resumo​

Neste capítulo, você aprendeu:

find: Busca poderosa por nome, tipo, tamanho, data, permissões
locate: Busca rápida com índice
grep: Busca no conteúdo dos arquivos
which/whereis: Encontrar comandos
Combinações: find + grep, find + xargs para eficiência


Próximos Passos​

Capítulo 3.7: Links Simbólicos e Links Físicos
Capítulo 3.8: Tipos de Sistemas de Arquivos


Capítulo criado em: Dezembro 2024