13 points par GN⁺ 2025-03-20 | 2 commentaires | Partager sur WhatsApp
  • fd est un programme pour trouver des éléments dans le système de fichiers, une alternative plus simple, plus rapide et plus conviviale à la commande classique find
    • Il ne prend pas en charge toutes les fonctionnalités de find, mais propose des valeurs par défaut raisonnables pour les cas d’usage courants
  • Windows, macOS, Linux
  • Syntaxe intuitive : utilisation simple sous la forme fd PATTERN (plus pratique que find -iname '*PATTERN*')
  • Prise en charge des expressions régulières et des motifs glob
  • Exploration parallèle des répertoires pour des performances rapides
  • Mise en couleur selon le type de fichier (similaire à ls)
  • Exécution parallèle de commandes prise en charge
  • Gestion intelligente de la casse : insensible à la casse par défaut, sensible si des majuscules sont incluses
  • Les fichiers et répertoires cachés sont ignorés par défaut
  • Les motifs de .gitignore sont respectés par défaut
  • Le nom de la commande est 50 % plus court que find

Utilisation

  • Rechercher dans le répertoire courant les éléments contenant un motif : fd netfl
  • Recherche possible avec une expression régulière : fd '^x.*rc$'
  • Rechercher dans un répertoire spécifique : fd passwd /etc
  • Lister récursivement tous les fichiers sous le répertoire courant : fd
  • Rechercher un type de fichier spécifique (option -e) : fd -e md
  • Rechercher un nom de fichier exact (option -g) : fd -g libc.so /usr
  • Inclure les fichiers cachés et ignorés dans la recherche (options -H, -I) : fd -H pre-commit fd -I num_cpu
  • Rechercher dans le chemin complet plutôt que seulement dans le nom du fichier (option -p) : fd -p '.*/lesson-\d+/[a-z]+.(jpg|png)'
  • Exécuter une commande pour chaque résultat trouvé (-x) : fd -e zip -x unzip
  • Passer tous les résultats trouvés à une seule commande (-X) : fd -g 'test_*.py' -X vim
  • Syntaxe des placeholders
    • {} : chemin complet du résultat trouvé
    • {.} : chemin sans l’extension du fichier
    • {/} : nom du fichier
    • {//} : répertoire parent
    • {/.} : nom du fichier sans extension
  • Exclure un répertoire ou un fichier spécifique (option -E) : fd -H -E .git
  • Il est possible de créer un fichier .fdignore pour définir des motifs d’exclusion globaux
  • Supprimer les fichiers trouvés (-X rm) : fd -H '^\.DS_Store$' -tf -X rm

Principales options de commande

  • -H : inclure les fichiers et répertoires cachés dans la recherche
  • -I : ignorer .gitignore et .fdignore
  • -p : rechercher dans le chemin complet
  • -e : rechercher une extension spécifique
  • -x : exécuter une commande sur les résultats trouvés
  • -X : passer tous les résultats trouvés à une seule commande
  • -E : exclure un fichier ou répertoire spécifique

Comparaison des performances (benchmark)

  • Résultats d’un test de recherche sur 750 000 répertoires et 4 millions de fichiers
    • Performance de find : environ 19,9 secondes
    • Performance de fd : environ 854,8 ms
  • 23 fois plus rapide que find

Intégration avec d’autres programmes

  • Afficher les résultats de recherche fd dans fzf : export FZF_DEFAULT_COMMAND='fd --type file'
  • Afficher la sortie de fd comme menu dans rofi : fd --type f -e pdf . $HOME | rofi -dmenu
  • Afficher la sortie sous forme d’arborescence : fd | tree --fromfile
  • Utiliser les résultats de recherche dans xargs : fd -0 -e rs | xargs -0 wc -l

2 commentaires

 
dbs0829 2025-03-20

Il y a un plugin Neovim qui utilise fd, alors je l’ai installé et, finalement, je m’en sers encore aujourd’hui haha.

 
GN⁺ 2025-03-20
Discussion Hacker News
  • J’ai publié un workflow Alfred. J’utilise beaucoup fd pour rechercher dans des répertoires personnalisés. Je m’en sers tous les jours et c’est excellent.
    • Hyperfine est aussi un excellent outil sous-estimé.
  • Je suis fan de sharkdp. Merci de créer d’aussi bons logiciels que j’utilise chaque jour.
    • J’utilise bat, fd, hexyl et hyperfine.
    • Si des ingénieurs bien rémunérés donnaient 10 $ par mois, Internet s’en porterait mieux.
    • Il existe beaucoup d’excellents outils, et il faut construire un écosystème pour les soutenir.
  • On peut installer rapidement fd, bat, numbat, hexyl et hyperfine et voir des captures d’écran sur Terminal Trove.
    • Liens fournis pour fd, bat, numbat, hyperfine et hexyl.
    • Possibilité d’installer et de consulter des captures d’écran.
  • J’aimerais que les flags de fd et rg soient alignés. Par exemple, fd et rg ont tous deux un flag --type, mais il n’a pas le même sens.
    • Dans fd, cela signifie fichier/répertoire/lien symbolique, etc., tandis que dans rg cela renvoie au type MIME du fichier.
    • fd a un flag --extension, mais pas rg.
    • Comme l’usage des deux outils est fortement corrélé, des flags au nom similaire seraient utiles.
  • Si je n’utilise pas les nouveaux outils Rust, c’est parce qu’il est difficile de retenir les options des outils d’origine.
    • J’utilise ripgrep dans VS Code, mais sur la ligne de commande j’utilise grep.
    • Tant que l’outil fonctionne, peu importe pour moi dans quel langage il est écrit.
    • GNU Stow est écrit en Perl, mais c’est pourtant l’un de mes outils Unix préférés.
    • Même si un outil Rust est un remplacement direct, je ne l’installerai probablement pas manuellement.
    • En tant qu’utilisateur, les gains de vitesse et la sécurité mémoire ne sont pas essentiels.
    • D’autres langages comme Go garantissent aussi la sécurité mémoire et bénéficient d’une forte participation de la communauté.
    • Je ne suis pas totalement convaincu par le récit selon lequel Rust serait le sauveur.
    • Si macOS ou Ubuntu remplaçaient cela par une alternative en Rust sans perturber mon workflow, je n’aurais rien à redire.
  • Il faudrait que je consulte Terminal Trove de temps en temps.
    • On peut y trouver facilement des alternatives aux outils qu’on utilise souvent.
    • find peut être remplacé par fd, time par hyperfine, grep par ripgrep.
    • Il y a aussi t-rec pour convertir asciinema en .gif, ou koji pour créer des commits manuellement.
  • Je vais probablement essayer fd. J’ai du mal à me souvenir de la syntaxe des arguments de find, donc j’utilise surtout find . | grep what_i_am_looking_for.
    • J’aime bien son intégration avec xargs.
    • Je n’ai pas trouvé comment fd gère l’exploration des répertoires symlink.
  • J’utilise beaucoup fd tous les jours et je l’installe par défaut sur chaque nouvelle machine.
    • J’ai utilisé find pendant longtemps, mais ce n’est pas vraiment pratique à l’usage.
    • Je suis à 100 % d’accord avec la tendance récente des utilitaires de remplacement.
    • Ils ne conservent peut-être pas toute la flexibilité d’origine, mais ils sont bien plus faciles à utiliser dans les cas courants.
  • Le fait d’ignorer beaucoup de dossiers par défaut est gênant.
    • Quand je veux savoir où quelque chose se trouve sur le système, j’utilise find.
    • Il y a une option dans fd pour ne rien ignorer, mais je ne m’en souviens jamais, alors je reviens à find.
  • J’aime les nouveaux outils CLI en Rust, mais fd est aussi difficile à mémoriser que tar ou ln.
    • Ce n’est la faute de personne.
    • Je dois toujours relire le manuel.
    • Malgré les bizarreries de GNU find, je m’en souviens mieux.