Zum Inhalt

fd - Schnelles und benutzerfreundliches Find-Alternative Cheatsheet

Installation

Plattform Befehl
Ubuntu/Debian sudo apt install fd-find (binary: fdfind)
Arch Linux sudo pacman -S fd
Fedora/RHEL sudo dnf install fd-find
Alpine Linux apk 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
Snap sudo snap install fd

Grundlegende Befehle

Befehl Beschreibung
fd filename Suche nach Dateien/Verzeichnissen, die "filename" entsprechen
fd pattern /path Suche nach Muster in spezifischem Verzeichnis
fd -e txt Finde alle Dateien mit .txt-Erweiterung
fd -e js -e ts Dateien mit mehreren Erweiterungen (.js oder .ts) finden
fd -t f pattern Nur Dateien finden (keine Verzeichnisse)
fd -t d dirname Nur Verzeichnisse finden
fd -t x Nur ausführbare Dateien finden
fd -t l Nur symbolische Links finden
fd -s Pattern Groß-/kleinschreibungsabhängige Suche (Standard ist groß-/kleinschreibungsunabhängig)
fd -d 3 pattern Suchtiefe auf 3 Ebenen begrenzen
fd -H pattern Versteckte Dateien in die Suche einbeziehen
fd -I pattern Respektiere keine .gitignore-Regeln
fd -a pattern Absolute Pfade statt relativer Pfade anzeigen
fd -l pattern Show detailed listing (like ls -l)
fd -0 pattern Use null separator (for piping to xargs -0)
## Erweiterte Nutzung
Befehl Beschreibung
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' pattern Bestimmte Muster von der Suche ausschließen
fd --no-ignore pattern Verwenden Sie keine .gitignore-, .fdignore- oder .ignore-Dateien
fd -L pattern Symbolische Links während der Suche folgen
fd --changed-within 2d Dateien, die in den letzten 2 Tagen geändert wurden
fd --changed-before 30d Dateien, die in den letzten 30 Tagen nicht modifiziert wurden
fd --size +100m Dateien größer als 100MB
fd --size +10m --size -100m Dateien zwischen 10 MB und 100 MB
fd --owner username Von einem bestimmten Benutzer besessene Dateien
fd --max-results 100 Begrenze Ausgabe auf 100 Ergebnisse
fd -x rm {} Befehl für jedes Ergebnis ausführen (Dateien löschen)
fd -X convert {} {.}.png Befehl mit mehreren Argumenten ausführen (Batch-Konvertierung)
fd --color never pattern Farbige Ausgabe deaktivieren
fd --strip-cwd-prefix pattern Remove ./ 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 1 Verwende Single Thread (für Debugging)
fd --base-directory /path pattern Basisverzeichnis 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

Problem Lösung
Command not found: fd On Debian/Ubuntu, binary is fdfind. Create symlink: ln -s $(which fdfind) ~/.local/bin/fd
Too many results Use depth limit -d 3, exclude patterns -E node_modules, or filter by type -t f
Not finding hidden files Add -H flag to include hidden files, or -HI to also ignore .gitignore rules
Search is too slow Reduce depth with -d, exclude large directories with -E, or use --threads to control parallelism
Regex not matching Remember fd uses case-insensitive search by default. Use -s for case-sensitive or -F for literal strings
Files in .gitignore showing up This shouldn't happen by default. Check for -I or --no-ignore flags in aliases or FD_OPTS
Special characters in filenames breaking commands Use -0 with xargs -0 or use -x flag instead: fd pattern -x command {}
Cannot execute command on results Check if using correct syntax: -x for individual execution, -X for batch execution
Color output in logs/files Disable with --color never or redirect stderr: fd pattern 2>/dev/null
Permission denied errors Redirect stderr to ignore: fd pattern 2>/dev/null or run with appropriate permissions
Not respecting .fdignore file Ensure .fdignore is in project root or ~/.config/fd/ignore. Check file syntax matches .gitignore format