find et fd
Après bat, voici un nouvel outil en Rust permettant de remplacer le vénérable find. L’objectif n’est pas cette fois-ci d’avoir de jolies couleurs et un truc tout shiny, mais plutôt de simplifier la syntaxe … et j’avoue que c’est pas du luxe !
Comme je suis loin d’utiliser find sur une base quotidienne, ce ne serait pas très honnête de promouvoir fd sans d’abord refaire un petit tour de find et de sa syntaxe. On va donc faire cet article en deux chapitres : l’un sur find, l’autre sur fd.
1. find
La syntaxe est basique :
find <chemin> <conditions> <action>
Conditions
-name "*.c"
-user rancune
-nouser
-type f # Fichier ( File )
-type d # Repertoire ( Directory )
-type l # Lien symbolique ( Link )
-depth 2 # Descende d'au moins 3 niveau en profondeur
-regex PATTERN
-size 8 # 8 blocks ( de 512 Octets )
-size -128c # Plus petit que 128 Octets
-size 144k # Exactement 144 KiB
-size +10M # Plus grand que 10 MiB
-size +2G # Plus grand que 2 GiB
-newer fichier.txt
-newerm fichier.txt # Modifié plus recemment que fichier.txt
-newerX fichier.txt # [c]changé, [m] modifié ou [B] crée
-newerXt "1 hour ago" # basé sur le timestamp
\! -name "*.c" # not logique
\( x -or y \) # ou logique
Actions
-exec rm {} \; # Exemple pour effacer
-print
-delete
Exemples
find . -name '*.jpg'
find . -name '*.c' -exec rm {} \;
find . -newerBt "24 hours ago"
find . -type f -mtimes +29 # Recherche des fichiers modifiés il y a plus de 30 jours
find . -iname devel.c # Insensible à la casse
2. fd
Syntaxe
fd [-HIEsiaLp0hV] [-d depth] [-t filetype] [-e
ext] [-E exclude] [-c when] [-j num] [-x cmd]
[pattern] [path...]
Recherche simple et rapide:
fd devel.c # Recherche de devel.c dans tout le filesystem
fd '^x.*rc$' # Recherche basée sur expression régulière
fd passwd /etc # Recherche à partir d'un repertoire
fd -e md # Recherche par extension
fd -g libc.so /usr # Recherche d'un pattern précis
fd -e zip -x unzip # execute une commande sur chaque fichier
fd -e zip -X unzip # execute une commande sur la liste des fichiers
Ça, c’est beau !
-
Pour voir les détails ( droits, propriétaires, etc. ) de chaque fichier matché :
fd … -X ls -lhd –color=always
-
Convertir tous les fichiers *.jpg en *.png avec convert :
fd -e jpg -x convert {} {.}.png
-
L’affichage de fd respecte les couleurs de ls avec la variable LS_COLORS
Le mot de la fin …
On ne va pas se mentir, fd est quand même assez attrayant. Pourtant, je trouve la logique de find assez élégante, même si un peu old-school. Je pense que chez moi, fd va trouver sa place, mais à côté de find … pas en tant que remplaçant !
Rancune