Zum Inhalt springen

fd - Schnelles und benutzerfreundliches Find-Alternative Cheatsheet

fd - Schnelles und benutzerfreundliches Find-Alternative Cheatsheet

Installation

PlattformBefehl
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

Grundlegende Befehle

BefehlBeschreibung
fd filenameSuche nach Dateien/Verzeichnissen, die “filename” entsprechen
fd pattern /pathSuche nach Muster in spezifischem Verzeichnis
fd -e txtFinde alle Dateien mit .txt-Erweiterung
fd -e js -e tsDateien mit mehreren Erweiterungen (.js oder .ts) finden
fd -t f patternNur Dateien finden (keine Verzeichnisse)
fd -t d dirnameNur Verzeichnisse finden
fd -t xNur ausführbare Dateien finden
fd -t lNur symbolische Links finden
fd -s PatternGroß-/kleinschreibungsabhängige Suche (Standard ist groß-/kleinschreibungsunabhängig)
fd -d 3 patternSuchtiefe auf 3 Ebenen begrenzen
fd -H patternVersteckte Dateien in die Suche einbeziehen
fd -I patternRespektiere keine .gitignore-Regeln
fd -a patternAbsolute Pfade statt relativer Pfade anzeigen
fd -l patternShow detailed listing (like ls -l)
fd -0 patternUse null separator (for piping to xargs -0)

Erweiterte Nutzung

BefehlBeschreibung
fd '^test.*\.js$'Verwende regex-Muster (Dateien, die mit “test” beginnen und mit .js enden)
fd -g '*.{js,ts}'Verwende Glob-Muster anstelle von Regex
fd -F 'exact.string'Suche nach festem String (keine Regex-Interpretation)
fd -E node_modules -E '*.tmp' patternBestimmte Muster von der Suche ausschließen
fd --no-ignore patternVerwenden Sie keine .gitignore-, .fdignore- oder .ignore-Dateien
fd -L patternSymbolische Links während der Suche folgen
fd --changed-within 2dDateien, die in den letzten 2 Tagen geändert wurden
fd --changed-before 30dDateien, die in den letzten 30 Tagen nicht modifiziert wurden
fd --size +100mDateien größer als 100MB
fd --size +10m --size -100mDateien zwischen 10 MB und 100 MB
fd --owner usernameVon einem bestimmten Benutzer besessene Dateien
fd --max-results 100Begrenze Ausgabe auf 100 Ergebnisse
fd -x rm {}Befehl für jedes Ergebnis ausführen (Dateien löschen)
fd -X convert {} {.}.pngBefehl mit mehreren Argumenten ausführen (Batch-Konvertierung)
fd --color never patternFarbige Ausgabe deaktivieren
fd --strip-cwd-prefix patternRemove ./ prefix from results
fd -H -t d "^\."Versteckte Verzeichnisse finden (beginnend mit Punkt)
fd -t f -x du -h {}Dateigröße für alle Übereinstimmungen anzeigen
fd pattern --threads 1Verwende Single Thread (für Debugging)
fd --base-directory /path patternBasisverzeichnis für Suche ändern

Konfiguration

Konfigurationsdateien

Globale Ignore-Datei-Speicherorte:

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

Projektspezifisch: .fdignoreim Projektstammverzeichnis

.fdignore Datei-Beispiel

# 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/

Umgebungsvariablen

# 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"

Nützliche Aliase

# 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'

Häufige Anwendungsfälle

Anwendungsfall 1: Bereinigen von Build-Artefakten

# 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 {}

Anwendungsfall 2: Code-Suche und -Analyse

# 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" {}

Anwendungsfall 3: Log-Datei-Management

# 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/

Anwendungsfall 4: Docker und Container-Management

# 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:" {} \;

Anwendungsfall 5: Sicherheits- und Berechtigungsaudit

# 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

Best Practices

  • Verwende .fdignoreDateien: Erstelle projektspezifische Ignore-Muster, um Suchen zu beschleunigen und Rauschen zu reduzieren
  • Nutze intelligente Standardeinstellungen: fdrespektiert automatisch

Would you like me to fill in the remaining placeholders with specific translations?.gitignore- verwende-Inur wenn du ignorierte Dateien brauchst

  • Kombiniere mit anderen Tools: LeitefdAusgabe anxargs,grep, oderfzffür leistungsstarke Workflows
  • Verwende-0mitxargs: Verwende immerfd -0 | xargs -0für Dateinamen mit Leerzeichen oder Sonderzeichen
  • Bevorzuge-xüber Pipes: Verwendefd -x command {}anstatt anxargszu leiten für bessere Leistung
  • Setze Tiefenbegrenzungen: Verwende-dFlag bei großen Verzeichnisstrukturen, um übermäßige Rekursion zu verhindern
  • Verwende spezifische Typfilter: Filtere nach Typ (-t f,-t d) frühzeitig, um den Suchraum zu reduzieren
  • Erstelle Aliase: Richte Shell-Aliase für häufig verwendetefdMuster ein, um Tipparbeit zu sparen
  • Kombiniere Zeit- und Größenfilter: Verwende--changed-withinund--sizezusammen für präzise Dateiauswahl
  • Teste Regex-Muster: Verwende Online-Regex-Tester vor komplexenfdSuchen, um Muster zu überprüfen

Fehlerbehebung

ProblemLösung
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