fd: Uma Alternativa Mais Simples e Rapida ao find
O Que Voce Vai Aprender
- Escapar da sintaxe complexa do find e buscar recursivamente com apenas
fd PATTERN - Resolver o detalhe do
fdfindno Ubuntu/Debian (o comando nao se chamafd) - Dominar os padroes do mundo real: extensoes, tipos, tratamento de gitignore,
-xexec
Resumo Rapido
- "Onde esta aquele arquivo?" do dia a dia ->
fd PATTERN(rapido, curto, colorido) - Buscar ate arquivos ignorados ->
fd -H -I PATTERN - Quando voce ainda precisa do find -> condicoes complexas como
-newer, formatacao-printf, maquinas apenas POSIX
Premissas (ambiente alvo)
- SO: Ubuntu 22.04 / 24.04 (familia Debian) como alvo principal; adapte para outras distros
- fd 8.x ou posterior
O Que e o fd?
Conclusao: fd e uma ferramenta moderna de busca de arquivos escrita em Rust. Como alternativa ao find, oferece sintaxe curta, alta velocidade, tratamento automatico de .gitignore e saida colorida.
fd e uma alternativa amigavel ao find, desenvolvida em sharkdp/fd. Ele nao substitui todos os recursos do find, mas para 90% das buscas de arquivos do dia a dia, e mais rapido e mais curto de escrever.
Diferencas principais em relacao ao find:
| Aspecto | find | fd |
|---|---|---|
| Sintaxe basica | find . -name '*.txt' |
fd '\.txt$' / fd -e txt |
| Estilo de busca | exato por padrao (-name) |
regex de substring |
| Case sensitivity | case-sensitive | smart case (ignora se minusculo) |
| Arquivos ocultos | pesquisados | excluidos por padrao (-H para incluir) |
.gitignore |
ignorado | respeitado automaticamente (-I desativa) |
| Saida | monocromatica | colorida (por tipo) |
| Velocidade | base de referencia | paralelo, rapido |
Como Instalar o fd?
Conclusao: No Ubuntu/Debian, instale com
apt install fd-find— mas o comando se chamafdfind, naofd. A solucao comum e um symlink ou alias para expor comofd.
Instalar por distribuicao:
# Ubuntu / Debian sudo apt install fd-find # Fedora / familia RHEL sudo dnf install fd-find # Arch Linux sudo pacman -S fd # macOS (Homebrew) brew install fd # Pelo cargo do Rust cargo install fd-find
Detalhe do Ubuntu/Debian: o comando e fdfind
Devido a um conflito de nome com outro pacote (fdclone) no Debian, o binario se chama fdfind em vez de fd. Digitar fd diretamente resulta em command not found.
Para usa-lo como fd, crie um symlink em ~/.local/bin:
mkdir -p ~/.local/bin ln -s "$(which fdfind)" ~/.local/bin/fd
Se ~/.local/bin nao esta no seu PATH, adicione ao ~/.bashrc e recarregue:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc source ~/.bashrc
Verifique a instalacao e versao:
fd --version
fd 9.0.0
Quais Sao os Fundamentos do fd?
Conclusao:
fd PATTERNbusca recursivamente abaixo do diretorio atual. O padrao e uma regex de substring, e voce pode passar o diretorio raiz como segundo argumento.
O uso minimo e apenas um fragmento do nome que voce quer:
fd readme
README.md docs/readme-ja.md src/readme.txt
Onde o find precisa de find . -iname '*readme*', fd readme e suficiente. O case e tratado com smart case (case-insensitive se o padrao e todo minusculo).
Especifique o diretorio inicial como segundo argumento:
# Buscar config abaixo de src/ fd config src/
O padrao e interpretado como expressao regular, entao pontos e ancoras funcionam diretamente:
# Arquivos terminando em .log fd '\.log$'
fd sem argumentos lista todos os arquivos e diretorios abaixo do atual (excluindo os de .gitignore e ocultos). Use em vez de ls -R.
Como Filtrar por Extensao ou Tipo?
Conclusao: Filtre por extensao com
-e EXTe por tipo com-t TYPE(f=arquivo / d=diretorio / l=symlink / x=executavel). Multiplos valores sao combinados com OR.
Filtre por extensao com -e (--extension); sem ponto necessario:
# Encontrar .jpg e .png (multiplas flags = OR) fd -e jpg -e png
Filtre por tipo com -t (--type):
# Apenas diretorios fd -t d node_modules # Apenas arquivos executaveis fd -t x # Arquivos / diretorios vazios fd -t empty
Valores de tipo comuns:
f... arquivo regulard... diretoriol... symlinkx... executavele... vazio
Combine com um padrao para fazer "arquivos .rs abaixo de src" de uma vez:
fd -e rs main src/
Como Buscar Arquivos Ocultos ou do .gitignore?
Conclusao: Por padrao, fd exclui arquivos ocultos e tudo no
.gitignore. Use-Hpara incluir ocultos,-Ipara desativar regras de ignore, e-u(unrestricted) para remover ambos de uma vez.
O comportamento "util" do fd pode atrapalhar — por isso uma busca por .env ou node_modules/ retorna vazia.
# Incluir ocultos (dotfiles) fd -H '\.env' # Ignorar .gitignore / .ignore e buscar tudo fd -I node_modules # Remover ambas as restricoes (unrestricted) fd -u secret
-u e abreviacao de --no-ignore --hidden (equivalente a -HI).
Para excluir um diretorio explicitamente, use -E (--exclude):
# Excluir .git e saida de build fd -E .git -E dist -e js
Como Executar um Comando em Cada Resultado?
Conclusao:
-x(--exec) executa um comando por resultado em paralelo;-X(--exec-batch) executa uma vez com todos os resultados. Ambos sao mais rapidos e curtos quefind -exec.
-x / -X substituem find ... -exec, e placeholders incorporam cada resultado.
# Deletar cada arquivo .tmp (executar em paralelo) fd -e tmp -x rm # Passar todos os arquivos .png para optipng de uma vez (processo unico) fd -e png -X optipng
Placeholders (usaveis dentro de -x):
{}... caminho completo encontrado{/}... apenas nome do arquivo (basename){//}... diretorio pai{.}... caminho sem extensao{/.}... nome do arquivo sem extensao
Exemplo: converter cada .jpg para um .png de mesmo nome:
fd -e jpg -x convert {} {.}.pngPara operacoes destrutivas como -x rm, primeiro confira a lista com fd -e tmp (sem exec) antes de executar. Como fd respeita .gitignore, arquivos inesperados podem estar faltando — ou incluidos — nos resultados.
Quando Usar find vs fd?
Conclusao: Use fd para buscas do dia a dia e find para condicoes complexas, saida formatada ou ambientes apenas POSIX. Eles nao sao exclusivos — use fd como principal por velocidade e conveniencia, find como secundario para condicoes especiais.
Casos onde fd e suficiente:
# Arquivos alterados nos ultimos 10 minutos fd --changed-within 10min # Arquivos maiores que 1MB fd -S +1M # Quando voce prefere sintaxe glob fd -g '*.config.js'
Casos para escolher find:
- Voce precisa de
-printfpara saida finamente formatada - Comparacoes de tempo compostas como
-newer fileA ! -newer fileB - Servidores de producao onde voce nao pode (ou nao quer) instalar fd (nao e padrao)
Copiar e colar: padroes comuns
fd PATTERN # Busca recursiva por nome fd -e log # Filtrar por extensao fd -t d PATTERN # Apenas diretorios fd -H -I PATTERN # Buscar incluindo ocultos/ignorados fd -e tmp -x rm # Executar comando por resultado fd --changed-within 1d # Alterados no ultimo dia