Aller au contenu

fd - Alternative de recherche rapide et conviviale Cheatsheet

fd - Alternative de recherche rapide et conviviale Cheatsheet

Installation

PlateformeCommande
Ubuntu/Debiansudo apt install fd-find (binary: fdfind)
Arch Linuxsudo pacman -S fd
Fedora/RHELsudo dnf install fd-find
Alpine Linuxapk add fd
macOS (Homebrew)brew install fd
macOS (MacPorts)sudo port install fd
Windows (Scoop)scoop install fd
Windows (Chocolatey)choco install fd
Windows (Winget)winget install sharkdp.fd
Cargo (All platforms)cargo install fd-find
Snapsudo snap install fd

Commandes de base

CommandeDescription
fd filenameRechercher des fichiers/répertoires correspondant à “filename”
fd pattern /pathRechercher un motif dans un répertoire spécifique
fd -e txtTrouver tous les fichiers avec l’extension .txt
fd -e js -e tsTrouver des fichiers avec plusieurs extensions (.js ou .ts)
fd -t f patternTrouver uniquement les fichiers (pas les répertoires)
fd -t d dirnameTrouver uniquement les répertoires
fd -t xTrouver uniquement les fichiers exécutables
fd -t lTrouver uniquement les liens symboliques
fd -s PatternRecherche sensible à la casse (par défaut insensible à la casse)
fd -d 3 patternLimiter la profondeur de recherche à 3 niveaux
fd -H patternInclure les fichiers cachés dans la recherche
fd -I patternNe respectez pas les règles .gitignore
fd -a patternAfficher les chemins absolus au lieu des chemins relatifs
fd -l patternShow detailed listing (like ls -l)
fd -0 patternUse null separator (for piping to xargs -0)

Utilisation avancée

CommandeDescription
fd '^test.*\.js$'Utiliser le motif regex (fichiers commençant par “test”, se terminant par .js)
fd -g '*.{js,ts}'Utilisez des motifs glob au lieu de regex
fd -F 'exact.string'Recherche de chaîne fixe (sans interprétation regex)
fd -E node_modules -E '*.tmp' patternExclure des motifs spécifiques de la recherche
fd --no-ignore patternN’utilisez pas les fichiers .gitignore, .fdignore, ou .ignore
fd -L patternSuivre les liens symboliques pendant la recherche
fd --changed-within 2dFichiers modifiés dans les 2 derniers jours
fd --changed-before 30dFichiers non modifiés dans les 30 derniers jours
fd --size +100mFichiers de plus de 100 Mo
fd --size +10m --size -100mFichiers entre 10 Mo et 100 Mo
fd --owner usernameFichiers appartenant à un utilisateur spécifique
fd --max-results 100Limiter la sortie à 100 résultats
fd -x rm {}Exécuter la commande sur chaque résultat (supprimer les fichiers)
fd -X convert {} {.}.pngExécuter la commande avec plusieurs arguments (conversion par lots)
fd --color never patternDésactiver la sortie colorée
fd --strip-cwd-prefix patternRemove ./ prefix from results
fd -H -t d "^\."Trouver des répertoires cachés (commençant par un point)
fd -t f -x du -h {}Afficher les tailles de fichiers pour toutes les correspondances
fd pattern --threads 1Utiliser un seul thread (pour le débogage)
fd --base-directory /path patternModifier le répertoire de base pour la recherche

Configuration

Fichiers de configuration

Emplacements du fichier d’ignore global :

  • Linux/macOS : ~/.config/fd/ignoreou ~/.fdignore
  • Windows : %APPDATA%\fd\ignore

Spécifique au projet : .fdignoredans la racine du projet

Exemple de fichier .fdignore

# Ignore dependency directories
node_modules/
vendor/
target/

# Ignore build outputs
build/
dist/
*.o
*.pyc

# Ignore IDE directories
.idea/
.vscode/
*.swp

# Ignore log files
*.log
logs/

# Ignore temporary files
*.tmp
*~
.DS_Store

# Ignore specific paths
/cache/
/tmp/

Variables d’environnement

# Set default options for all fd commands
export FD_OPTS="--hidden --follow --exclude .git"

# Control colorization (fd respects LS_COLORS)
export LS_COLORS="di=34:ln=35:ex=31:*.txt=33"

Alias utiles

# Add to ~/.bashrc or ~/.zshrc

# Search including hidden files
alias fdh='fd -H'

# Search ignoring .gitignore
alias fda='fd -I'

# Find large files
alias fdl='fd --size +100m'

# Find recent files (last 24 hours)
alias fdr='fd --changed-within 1d'

# Find and preview with fzf and bat
alias fdf='fd -t f | fzf --preview "bat --color=always {}"'

# Find and edit with vim
alias fdv='fd -t f | fzf | xargs -r vim'

Cas d’utilisation courants

Cas d’utilisation 1 : Nettoyage des artefacts de build

# Remove all Python compiled files
fd -e pyc -e pyo -x rm {}

# Remove all node_modules directories (up to 2 levels deep)
fd -t d -d 2 '^node_modules$' -x rm -rf {}

# Clean old log files (older than 30 days)
fd -e log --changed-before 30d -x rm {}

# Remove all temporary files
fd -g '*.tmp' -g '*~' -g '*.swp' -x rm {}

Cas d’utilisation 2 : Recherche et analyse de code

# Find all JavaScript/TypeScript files modified in last week
fd -e js -e ts -e jsx -e tsx --changed-within 7d

# Count lines of code in Rust project
fd -e rs -x wc -l {} | awk '{sum+=$1} END {print sum}'

# Find all TODO comments in Python files
fd -e py -x grep -Hn "TODO:" {}

# Find largest source files
fd -e java -e kt -x du -h {} | sort -hr | head -20

# Find files containing specific function name
fd -e cpp -e hpp -x grep -l "myFunction" {}

Cas d’utilisation 3 : Gestion des fichiers de log

# Find and compress logs older than 7 days
fd -e log --changed-before 7d -x gzip {}

# Search for errors in recent logs
fd -e log --changed-within 1d -x grep -i "error" {} \;

# Find large log files (over 100MB)
fd -e log --size +100m -l

# Archive old logs to separate directory
fd -e log --changed-before 30d -x mv {} /archive/logs/

Cas d’utilisation 4 : Gestion de Docker et des conteneurs

# Find all Dockerfiles in project
fd -g '*Dockerfile*' -g 'Dockerfile.*'

# Find all docker-compose files
fd -g 'docker-compose*.yml' -g 'docker-compose*.yaml'

# Find and validate Dockerfiles
fd '^Dockerfile$' -x docker build --dry-run -f {} .

# Find container-related configs
fd -e yml -e yaml -x grep -l "kind:" {} \;

Cas d’utilisation 5 : Audit de sécurité et des permissions

# Find world-writable files (security risk)
fd -t f -x sh -c 'test -w {} && ls -l {}'

# Find SUID/SGID binaries
fd -t x -x sh -c 'test -u {} -o -g {} && ls -l {}'

# Find files with passwords in name
fd -i password -i passwd -i secret

# Find configuration files with potential secrets
fd -g '*.conf' -g '*.cfg' -g '*.ini' -x grep -i "password\|secret\|key" {}

# Find SSH keys
fd -g 'id_rsa*' -g 'id_ed25519*' -H

Meilleures pratiques

  • Utilisez des fichiers .fdignore : Créez des modèles d’ignore spécifiques au projet pour accélérer les recherches et réduire le bruit
  • Exploitez les valeurs par défaut intelligentes : fdrespecte automatiquement

Note: Some sections were left blank (5, 6, 11-18) as no specific text was provided to translate. I’ve maintained the structure and markdown formatting as requested..gitignore- utilisez-Iuniquement lorsque vous avez besoin de fichiers ignorés

  • Combinez avec d’autres outils : Redirigezfdla sortie versxargs,grep, oufzfpour des workflows puissants
  • Utilisez-0avecxargs : Utilisez toujoursfd -0 | xargs -0pour les noms de fichiers avec des espaces ou des caractères spéciaux
  • Préférez-xaux redirections : Utilisezfd -x command {}au lieu de rediriger versxargspour de meilleures performances
  • Définissez des limites de profondeur : Utilisez-dpour les grands arbres de répertoires afin d’éviter une récursion excessive
  • Utilisez des filtres de type spécifiques : Filtrez par type (-t f,-t d) tôt pour réduire l’espace de recherche
  • Créez des alias : Configurez des alias shell pour les motifsfdfréquemment utilisés pour économiser de la saisie
  • Combinez des filtres de temps et de taille : Utilisez--changed-withinet--sizeensemble pour cibler précisément des fichiers
  • Testez les motifs regex : Utilisez des testeurs regex en ligne avant des recherchesfdcomplexes pour vérifier les motifs

Dépannage

ProblèmeSolution
Command not found: fdOn Debian/Ubuntu, binary is fdfind. Create symlink: ln -s $(which fdfind) ~/.local/bin/fd
Too many resultsUse depth limit -d 3, exclude patterns -E node_modules, or filter by type -t f
Not finding hidden filesAdd -H flag to include hidden files, or -HI to also ignore .gitignore rules
Search is too slowReduce depth with -d, exclude large directories with -E, or use --threads to control parallelism
Regex not matchingRemember fd uses case-insensitive search by default. Use -s for case-sensitive or -F for literal strings
Files in .gitignore showing upThis shouldn’t happen by default. Check for -I or --no-ignore flags in aliases or FD_OPTS
Special characters in filenames breaking commandsUse -0 with xargs -0 or use -x flag instead: fd pattern -x command {}
Cannot execute command on resultsCheck if using correct syntax: -x for individual execution, -X for batch execution
Color output in logs/filesDisable with --color never or redirect stderr: fd pattern 2>/dev/null
Permission denied errorsRedirect stderr to ignore: fd pattern 2>/dev/null or run with appropriate permissions
Not respecting .fdignore fileEnsure .fdignore is in project root or ~/.config/fd/ignore. Check file syntax matches .gitignore format