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