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
Tem um plugin do Neovim que usa
fd, então instalei e venho usando até hoje haha.Comentários no Hacker News
fdpara pesquisar diretórios personalizados. Uso todos os dias e é excelentehyperfinetambém é uma ferramenta ótima e subestimadabat,fd,hexylehyperfinefd,bat,numbat,hexylehyperfinee ver capturas de tela no Terminal Trovefd,bat,numbat,hyperfineehexylfdergfossem alinhadas. Por exemplo, tantofdquantorgtêm a flag--type, mas com significados diferentesfd, significa arquivo/diretório/link simbólico etc., enquanto emrgsignifica tipo MIME de arquivofdtem a flag--extension, masrgnãoripgrepno VS Code, mas na linha de comando usogrepGNU Stowé escrito em Perl, mas é uma das minhas ferramentas Unix favoritasfindpode ser trocado porfd,timeporhyperfineegrepporripgrept-rec, que converteasciinemaem.gif, ekoji, que cria commits manualmente, entre outrosfd. É difícil lembrar como usar os argumentos defind, então normalmente usofind . | grep what_i_am_looking_forxargsfdlida com navegação em diretórios com symlinkfdtodos os dias e o instalo por padrão em máquinas novasfindpor muito tempo, mas não é exatamente confortável de usarfindfdtem uma opção para não ignorar, mas nunca lembro qual é, então volto parafindfdé tão difícil de lembrar comotarelnGNU find, eu o memorizo melhor