# fd (alternative à [find](find.md)) (macOS / Linux / Windows) https://github.com/sharkdp/fd ```bash $ brew install fd ``` ``` choco install fd ``` ##### Recherche un fichier dans le répertoire courant (et sous-dossiers): ```bash ~ master* ⇡ ❯ fd -H .zshrc .zshrc ~/.config master* ⇡ ❯ fd -HI pip.conf pip/pip.conf ``` ##### Recherche dans un répertoire particulier: ```bash # Fichiers cachés (-H) dans le dossier .ssh $ fd -HI 'id_*' .ssh .ssh/id_ed25519 .ssh/id_ed25519.pub .ssh/id_rsa .ssh/id_rsa.pub .ssh/id_rsa.zip ❯ fd -HI 'id_*' $HOME/.ssh /Users/bruno/.ssh/id_ed25519 /Users/bruno/.ssh/id_ed25519.pub /Users/bruno/.ssh/id_rsa /Users/bruno/.ssh/id_rsa.pub ``` ##### Recherche par regex: ```bash $ fd -I '^.*.conf$' /opt /opt/homebrew/share/autoconf /opt/homebrew/share/user_map.conf /opt/homebrew/Cellar/mariadb/10.6.4/share/user_map.conf /opt/homebrew/Cellar/groonga/11.0.5/etc/groonga/groonga.conf /opt/homebrew/Cellar/groonga/11.0.5/etc/groonga/httpd/fastcgi.conf ... $ fd -H '^.*.conf$' /opt $ ``` https://docs.rs/regex/1.0.0/regex/#syntax ##### Fichiers se terminant par *'[0-9].jpg'*: ```bash $ fd -HI '.*[0-9]\.jpg$' ~ $ find ~ -iname '*[0-9].jpg' ``` ##### Rechercher une extension: ```bash # Rechercher les scripts bash (.sh) dans le répertoire courant $ fd -e sh . convert-videos-for-plex.sh handbrake_for_plex.sh keywords2insta.sh macho.sh ``` ##### Sans arguments: ```bash # afficher tous les entrées du répertoire courant $ fd # afficher tous les entrées d'un répertoire $ fd . $HOME/.ssh /Users/bruno/.ssh/config /Users/bruno/.ssh/id_ed25519 /Users/bruno/.ssh/id_ed25519.pub /Users/bruno/.ssh/id_rsa /Users/bruno/.ssh/id_rsa.pub /Users/bruno/.ssh/known_hosts ``` ##### Chercher un fichier précis: ```bash $ fd -I -g php.ini /opt /opt/homebrew/etc/php/7.4/php.ini /opt/homebrew/etc/php/8.0/php.ini ``` ##### Rechercher plusieurs patterns: ```bash $ fd -H ".env|docker-compose.yml" .env docker-compose.yml ``` #### Option: - **-H, --hidden**: cherche dans les fichiers et dossiers cachés - **-I, --no-ignore**: cherche dans les fichiers et dossiers ignorés par '.gitignore', '.ignore', '.fdignore' - **-x, --exec **: exécute une commande pour chaque résultat - **-X, --exec-batch **: exécute une commande pour tous les résultats en même temps - **-s, --case-sensitive**: - **-i, --ignore-case**: (défaut) - **-l, --list-details** - **-L, --follow**: suit les liens symboliques (pas par défaut) - **-d, --max-depth **: limite le nombre de répertoires traversés (pas de limite par défaut) - **-t, --type ...**: filtre par type de fichiers - 'f' or 'file': fichiers réguliers - 'd' or 'directory': répertoires - 'l' or 'symlink': liens symboliques - 'x' or 'executable': executables - 'e' or 'empty': fichiers vides ou répertoires - 's' or 'socket': socket - 'p' or 'pipe': named pipe (FIFO) - **-e, --extension ...**: filtre par extension (plusieurs autorisées) - **-E, --exclude ...**: exclure des fichiers/répertoires des résultats (--exclude '*.pyc', --exclude node_modules) - **-c, --color **: colorie chaque chaine trouvée ('auto', 'never', 'always') - **-S, --size ...**: filtre par la taille des fichiers (+3k, -500, +1g, 300) - **--changed-within **: filtre par la date de modification - --changed-within 2 weeks (10h, 1d, 35min) - --change-newer-than '2018-10-27 10:00:00' - **--changed-before **: filtre par la date de modification - --changed-before '2018-10-27 10:00:00' - --change-older-than 2weeks (10h, 1d, 35min) - **-o, --owner **: filtre par utilisateur/groupe (--owner bruno, --owner :staff, --owner '!john:students') - **--max-results **: limite le nombre de résultats à 'count' et quitte ```bash # -l, --list-details $ fd -Il '^.*.conf$' /opt/homebrew/etc -rw-r--r-- 1 bruno admin 696 jul 24 07:46 /opt/homebrew/etc/fonts/conf.d/10-hinting-slight.conf -rw-r--r-- 1 bruno admin 2,2K jul 24 07:46 /opt/homebrew/etc/fonts/conf.d/10-scale-bitmap-fonts.conf -rw-r--r-- 1 bruno admin 1,6K jul 24 07:46 /opt/homebrew/etc/fonts/conf.d/20-unhint-small-vera.conf ``` ```bash $ fd -h fd 8.1.1 USAGE: fd [FLAGS/OPTIONS] [] [...] FLAGS: -H, --hidden Search hidden files and directories -I, --no-ignore Do not respect .(git|fd)ignore files -s, --case-sensitive Case-sensitive search (default: smart case) -i, --ignore-case Case-insensitive search (default: smart case) -g, --glob Glob-based search (default: regular expression) -a, --absolute-path Show absolute instead of relative paths -l, --list-details Use a long listing format with file metadata -L, --follow Follow symbolic links -p, --full-path Search full path (default: file-/dirname only) -0, --print0 Separate results by the null character -h, --help Prints help information -V, --version Prints version information OPTIONS: -d, --max-depth Set maximum search depth (default: none) -t, --type ... Filter by type: file (f), directory (d), symlink (l), executable (x), empty (e), socket (s), pipe (p) -e, --extension ... Filter by file extension -x, --exec Execute a command for each search result -X, --exec-batch Execute a command with all search results at once -E, --exclude ... Exclude entries that match the given glob pattern -c, --color When to use colors: never, *auto*, always -S, --size ... Limit results based on the size of files. --changed-within Filter by file modification time (newer than) --changed-before Filter by file modification time (older than) -o, --owner Filter by owning user and/or group ARGS: the search pattern - a regular expression unless '--glob' is used (optional) ... the root directory for the filesystem search (optional) Note: `fd -h` prints a short and concise overview while `fd --help` gives all details. ```