Dicas avançadas de navegação e busca com find e fd no Linux
1. Introdução ao find e fd: Por que dominar a busca de arquivos?
A busca eficiente de arquivos no Linux é uma habilidade essencial para administradores de sistemas, desenvolvedores e usuários avançados. O comando find, presente desde os primórdios do Unix, oferece flexibilidade incomparável, enquanto o fd (escrito em Rust) surge como alternativa moderna e extremamente rápida.
O find brilha em sistemas legados, ambientes mínimos e cenários que exigem lógica complexa com expressões regulares avançadas. Já o fd se destaca pela velocidade — frequentemente 5 a 10 vezes mais rápido — e sintaxe intuitiva, ideal para buscas cotidianas em projetos com muitos arquivos.
Para instalar o fd no Ubuntu/Debian:
sudo apt install fd-find
No Fedora:
sudo dnf install fd-find
No Arch Linux:
sudo pacman -S fd
2. Expressões de busca avançada com find
O find permite combinar múltiplos critérios com operadores lógicos. O operador -a (AND implícito) combina condições, -o (OR) oferece alternativas e ! nega critérios.
Exemplo: encontrar arquivos com mais de 1MB ou modificados nos últimos 7 dias, mas que não sejam logs:
find /var/log -size +1M -o -mtime -7 ! -name "*.log"
Busca por permissões específicas:
find /etc -perm /4000 -type f
Localiza arquivos com bit SUID ativo (permissão 4000).
Filtro por tamanho e data de modificação:
find /home -size +100M -mtime +30 -type f
Encontra arquivos maiores que 100MB não modificados há mais de 30 dias.
Ações embutidas para processamento em lote:
find /tmp -name "*.tmp" -mtime +7 -delete
Remove arquivos temporários com mais de 7 dias.
Para executar comandos com confirmação:
find . -name "*.bak" -ok rm {} \;
3. Otimizando buscas com padrões e expressões regulares
Curingas tradicionais funcionam com -name e -path. O * corresponde a qualquer sequência, ? a um caractere e [] a conjuntos.
Exemplo: arquivos que começam com "backup" e têm extensão de dois caracteres:
find / -name "backup*.??"
Para padrões complexos, use -regex (compatível com Emacs) ou -iregex (case insensitive):
find /projects -type f -regex ".*\.\(pdf\|docx\|xlsx\)$"
Busca documentos do Office e PDFs.
Busca por texto no nome do arquivo com padrão específico:
find /data -type f -name "*relatorio*202[4-5]*"
4. Navegação eficiente com fd: sintaxe moderna e intuitiva
O fd simplifica drasticamente a busca. Comando básico:
fd padrao
Busca recursiva por "padrao" no diretório atual.
Filtrando por extensão:
fd -e py -e js
Encontra todos os arquivos Python e JavaScript.
Filtrando por tipo (f = arquivo, d = diretório):
fd -t d node_modules
Localiza diretórios chamados "node_modules".
Controle de profundidade:
fd -e log --max-depth 3
Busca arquivos .log até 3 níveis de profundidade.
Ignorando arquivos ocultos e respeitando .gitignore:
fd -H -t f "config"
Mostra também arquivos ocultos (padrão: ocultos são ignorados).
Para ignorar regras do .gitignore:
fd --no-ignore -e mp3
5. Combinando find/fd com outros comandos do terminal
O verdadeiro poder surge na combinação com outras ferramentas. Use xargs para processamento em lote:
find /var/log -name "*.gz" -mtime +90 | xargs -I {} rm {}
Para execução paralela com parallel (instale com sudo apt install parallel):
fd -e jpg -t f | parallel -j 4 convert {} {.}.png
Integração com grep para buscar conteúdo:
fd -e txt -x grep -l "erro crítico" {}
Com awk e sed para transformação:
fd -e csv | xargs -I {} awk -F, '{print $1,$3}' {} > dados_extraidos.txt
Movendo arquivos seletivamente:
fd -e mp4 -t f | xargs -I {} mv {} /mnt/videos/
6. Técnicas avançadas de performance e segurança
Limitação de profundidade com -maxdepth no find:
find / -maxdepth 2 -name "*.conf"
Usando -prune para pular diretórios específicos:
find / -path /proc -prune -o -path /sys -prune -o -name "*.core" -print
O -quit interrompe a busca após o primeiro resultado:
find / -name "senhas.txt" -quit
Para evitar problemas com espaços e caracteres especiais, sempre use -print0 com xargs -0:
find /home -type f -size +500M -print0 | xargs -0 -I {} du -sh {}
Monitoramento de performance:
time find / -name "*.log" -type f > /dev/null
time fd -e log -t f > /dev/null
7. Automação de tarefas repetitivas com find e fd
Script para limpeza automática de arquivos temporários:
#!/bin/bash
# Limpa arquivos temporários com mais de 30 dias
find /tmp -type f -atime +30 -delete
find /var/tmp -type f -atime +30 -delete
echo "Limpeza concluída em $(date)"
Agendamento com cron (edite com crontab -e):
0 3 * * 0 /usr/local/bin/clean_temp.sh
Gerando relatório de arquivos grandes:
#!/bin/bash
REPORT="/var/reports/arquivos_grandes_$(date +%Y%m%d).txt"
find /home -type f -size +1G -exec ls -lh {} \; > "$REPORT"
echo "Relatório gerado: $REPORT"
8. Comparação prática e dicas de migração de find para fd
Tabela de equivalência:
| Objetivo | Comando find |
Comando fd |
|---|---|---|
| Buscar por nome | find . -name "*.txt" |
fd -e txt |
| Buscar por tipo diretório | find . -type d -name "src" |
fd -t d src |
| Buscar por data (modif. hoje) | find . -mtime 0 |
fd --changed-within 24h |
| Ignorar .gitignore | find . -not -path './.git/*' |
fd --no-ignore |
| Executar comando | find . -name "*.py" -exec wc -l {} + |
fd -e py -x wc -l |
Exemplo lado a lado para permissões:
# find
find /usr/bin -perm /4000 -type f -exec ls -la {} \;
# fd
fd -t f -p /usr/bin -x ls -la {} \; --and -perm /4000
Quando manter find: em scripts de sistemas legados, ambientes sem Rust, ou quando precisar de lógica booleana complexa com -prune e expressões regulares avançadas.
Quando adotar fd: fluxo diário, projetos com muitos arquivos, busca interativa no terminal e integração com ferramentas modernas.
Referências
- Documentação oficial do GNU Findutils — Manual completo do comando
findcom todas as opções e exemplos detalhados - Repositório oficial do fd no GitHub — Código fonte, documentação e exemplos de uso do
fd - Guia avançado de find no Linux Handbook — Tutorial prático com 35 exemplos de uso do
findpara administradores - Comparação de performance: find vs fd no Blog do Julia Evans — Análise detalhada de velocidade e usabilidade entre as duas ferramentas
- fd: A alternativa moderna ao find no DigitalOcean Community — Tutorial introdutório com exemplos práticos de migração
- Combinações poderosas: find + xargs no Tecmint — Guia sobre como combinar
findcomxargspara processamento eficiente - Automação com cron e find no LinuxConfig — Exemplos de scripts agendados para limpeza e manutenção de arquivos