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
Il y a un plugin Neovim qui utilise
fd, alors je l’ai installé et, finalement, je m’en sers encore aujourd’hui haha.Discussion Hacker News
--type, mais il n’a pas le même sens.--extension, mais pas rg.findpeut être remplacé par fd,timepar hyperfine,greppar ripgrep..gif, ou koji pour créer des commits manuellement.find . | grep what_i_am_looking_for.