13 pontos por GN⁺ 2025-03-20 | 2 comentários | Compartilhar no WhatsApp
  • fd é um programa para encontrar itens no sistema de arquivos, sendo uma alternativa mais simples, rápida e amigável ao comando find tradicional
    • Embora não ofereça todos os recursos do find, fornece padrões sensatos para os casos de uso mais comuns
  • Windows, macOS, Linux
  • Sintaxe intuitiva: pode ser usado de forma simples no formato fd PATTERN (mais prático do que find -iname '*PATTERN*')
  • Suporte a expressões regulares e padrões glob
  • Busca paralela em diretórios para alto desempenho
  • Destaque por cores conforme o tipo de arquivo (semelhante ao ls)
  • Suporte à execução paralela de comandos
  • Diferenciação inteligente entre maiúsculas e minúsculas: ignora por padrão, mas diferencia quando há letras maiúsculas
  • Ignora arquivos e diretórios ocultos por padrão
  • Ignora padrões de .gitignore por padrão
  • O nome do comando é 50% mais curto que find

Uso

  • Buscar itens que contenham um padrão no diretório atual fd netfl
  • Buscar usando expressão regular fd '^x.*rc$'
  • Buscar em um diretório específico fd passwd /etc
  • Listar recursivamente todos os arquivos abaixo do diretório atual fd
  • Buscar um tipo específico de arquivo (usando a opção -e) fd -e md
  • Buscar um nome de arquivo exato (usando a opção -g) fd -g libc.so /usr
  • Incluir arquivos ocultos e ignorados na busca (usando as opções -H, -I) fd -H pre-commit fd -I num_cpu
  • Buscar no caminho completo, não apenas no nome do arquivo (usando a opção -p) fd -p '.*/lesson-\d+/[a-z]+.(jpg|png)'
  • Executar um comando para cada resultado encontrado (-x) fd -e zip -x unzip
  • Passar todos os resultados encontrados para um único comando (-X) fd -g 'test_*.py' -X vim
  • Sintaxe de placeholders
    • {}: caminho completo do resultado encontrado
    • {.}: caminho sem a extensão do arquivo
    • {/}: nome do arquivo
    • {//}: diretório pai
    • {/.}: nome do arquivo sem a extensão
  • É possível excluir diretórios ou arquivos específicos (usando a opção -E) fd -H -E .git
  • É possível criar um arquivo .fdignore para definir padrões globais de exclusão
  • É possível apagar os arquivos encontrados (-X rm) fd -H '^\.DS_Store$' -tf -X rm

Principais opções de comando

  • -H: incluir arquivos e diretórios ocultos na busca
  • -I: ignorar .gitignore e .fdignore
  • -p: buscar no caminho completo
  • -e: buscar uma extensão específica
  • -x: executar um comando nos resultados encontrados
  • -X: passar todos os resultados encontrados para um único comando
  • -E: excluir um arquivo ou diretório específico

Comparação de desempenho (Benchmark)

  • Resultado de testes de busca em 750.000 diretórios e 4 milhões de arquivos
    • Desempenho do find: cerca de 19,9 segundos
    • Desempenho do fd: cerca de 854,8ms
  • 23 vezes mais rápido que find

Integração com outros programas

  • É possível mostrar os resultados do fd no fzf export FZF_DEFAULT_COMMAND='fd --type file'
  • Exibir a saída do fd como menu no rofi fd --type f -e pdf . $HOME | rofi -dmenu
  • Mostrar a saída em estrutura de árvore fd | tree --fromfile
  • Usar os resultados da busca com xargs fd -0 -e rs | xargs -0 wc -l

2 comentários

 
dbs0829 2025-03-20

Tem um plugin do Neovim que usa fd, então instalei e venho usando até hoje haha.

 
GN⁺ 2025-03-20
Comentários no Hacker News
  • Lancei um workflow do Alfred. Uso bastante o fd para pesquisar diretórios personalizados. Uso todos os dias e é excelente
    • O hyperfine também é uma ferramenta ótima e subestimada
  • Sou fã do sharkdp. Obrigado por criar softwares incríveis que uso todos os dias
    • Uso bat, fd, hexyl e hyperfine
    • Se engenheiros bem remunerados doassem US$ 10 por mês, a internet seria melhor
    • Há muitas ferramentas excelentes, e precisamos criar um ecossistema para apoiá-las
  • Dá para instalar rapidamente fd, bat, numbat, hexyl e hyperfine e ver capturas de tela no Terminal Trove
    • Links para fd, bat, numbat, hyperfine e hexyl
    • É possível instalar e ver as capturas de tela
  • Gostaria que as flags de fd e rg fossem alinhadas. Por exemplo, tanto fd quanto rg têm a flag --type, mas com significados diferentes
    • Em fd, significa arquivo/diretório/link simbólico etc., enquanto em rg significa tipo MIME de arquivo
    • fd tem a flag --extension, mas rg não
    • Como o uso das duas ferramentas tem alta correlação, flags com nomes parecidos seriam úteis
  • O motivo de eu não usar novas ferramentas em Rust é que é difícil lembrar as opções das ferramentas originais
    • Uso ripgrep no VS Code, mas na linha de comando uso grep
    • Desde que a ferramenta funcione, não me importo em que linguagem foi escrita
    • GNU Stow é escrito em Perl, mas é uma das minhas ferramentas Unix favoritas
    • Mesmo que uma ferramenta Rust fosse um substituto drop-in, eu não a instalaria manualmente
    • Como usuário, melhorias de velocidade e segurança de memória não são importantes
    • Outras linguagens, como Go, também garantem segurança de memória e têm alta participação da comunidade
    • Não estou totalmente convencido da narrativa de que Rust é o salvador
    • Se macOS ou Ubuntu substituírem por alternativas em Rust sem afetar meu fluxo de trabalho, não vou reclamar
  • Preciso dar uma olhada no Terminal Trove de vez em quando
    • Dá para encontrar substitutos fáceis para ferramentas que uso com frequência
    • find pode ser trocado por fd, time por hyperfine e grep por ripgrep
    • t-rec, que converte asciinema em .gif, e koji, que cria commits manualmente, entre outros
  • Vou experimentar fd. É difícil lembrar como usar os argumentos de find, então normalmente uso find . | grep what_i_am_looking_for
    • Gosto de como ele se integra com xargs
    • Não consegui descobrir como fd lida com navegação em diretórios com symlink
  • Uso bastante fd todos os dias e o instalo por padrão em máquinas novas
    • Usei find por muito tempo, mas não é exatamente confortável de usar
    • Concordo 100% com a tendência recente de utilitários alternativos
    • Talvez eles não mantenham toda a flexibilidade do original, mas são muito mais fáceis de usar nos casos comuns
  • Acho inconveniente ele ignorar muitas pastas por padrão
    • Quando quero saber onde algo está no sistema, uso find
    • fd tem uma opção para não ignorar, mas nunca lembro qual é, então volto para find
  • Gosto de novas ferramentas CLI em Rust, mas fd é tão difícil de lembrar como tar e ln
    • Não é culpa de ninguém
    • Sempre preciso reler o manual
    • Apesar das esquisitices do GNU find, eu o memorizo melhor