13 Punkte von GN⁺ 2025-03-20 | 2 Kommentare | Auf WhatsApp teilen
  • fd ist ein Programm zum Auffinden von Einträgen im Dateisystem und eine einfachere, schnellere und benutzerfreundlichere Alternative zum bestehenden find-Befehl
    • Es unterstützt nicht alle Funktionen von find, bietet aber sinnvolle Standardwerte für gängige Anwendungsfälle
  • Windows, macOS, Linux
  • Intuitive Syntax: einfach im Format fd PATTERN verwendbar (bequemer als find -iname '*PATTERN*')
  • Unterstützung für reguläre Ausdrücke und Glob-Muster
  • Parallele Verzeichnisdurchsuchung für hohe Geschwindigkeit
  • Farbige Hervorhebung nach Dateityp (ähnlich wie bei ls)
  • Unterstützung für parallele Befehlsausführung
  • Intelligente Groß-/Kleinschreibung: standardmäßig ohne Beachtung der Groß-/Kleinschreibung, bei enthaltenen Großbuchstaben mit Beachtung
  • Versteckte Dateien und Verzeichnisse werden standardmäßig ignoriert
  • .gitignore-Muster werden standardmäßig berücksichtigt
  • Der Befehlsname ist 50 % kürzer als find

Verwendung

  • Nach Einträgen mit einem Muster im aktuellen Verzeichnis suchen: fd netfl
  • Suche mit regulären Ausdrücken möglich: fd '^x.*rc$'
  • In einem bestimmten Verzeichnis suchen: fd passwd /etc
  • Alle Dateien unterhalb des aktuellen Verzeichnisses rekursiv auflisten: fd
  • Nach einem bestimmten Dateityp suchen (mit Option -e): fd -e md
  • Nach einem exakten Dateinamen suchen (mit Option -g): fd -g libc.so /usr
  • Einschließlich versteckter und ignorierter Dateien suchen (mit Optionen -H, -I): fd -H pre-commit fd -I num_cpu
  • Im gesamten Pfad statt nur im Dateinamen suchen (mit Option -p): fd -p '.*/lesson-\d+/[a-z]+.(jpg|png)'
  • Für jedes Suchergebnis einen Befehl ausführen (-x): fd -e zip -x unzip
  • Alle Suchergebnisse an einen einzelnen Befehl übergeben (-X): fd -g 'test_*.py' -X vim
  • Platzhalter-Syntax
    • {}: vollständiger Pfad des Suchergebnisses
    • {.}: Pfad ohne Dateierweiterung
    • {/}: Dateiname
    • {//}: übergeordnetes Verzeichnis
    • {/.}: Dateiname ohne Erweiterung
  • Bestimmte Verzeichnisse oder Dateien ausschließen (mit Option -E): fd -H -E .git
  • Durch Anlegen einer .fdignore-Datei können globale Ausschlussmuster festgelegt werden
  • Gefundene Dateien können gelöscht werden (-X rm): fd -H '^\.DS_Store$' -tf -X rm

Wichtige Befehlsoptionen

  • -H: versteckte Dateien und Verzeichnisse in die Suche einbeziehen
  • -I: .gitignore und .fdignore ignorieren
  • -p: im gesamten Pfad suchen
  • -e: nach einer bestimmten Erweiterung suchen
  • -x: Befehl für Suchergebnisse ausführen
  • -X: alle Suchergebnisse an einen einzelnen Befehl übergeben
  • -E: bestimmte Datei oder bestimmtes Verzeichnis ausschließen

Leistungsvergleich (Benchmark)

  • Ergebnis eines Suchtests mit 750.000 Verzeichnissen und 4 Millionen Dateien
    • find-Leistung: ca. 19,9 Sekunden
    • fd-Leistung: ca. 854,8 ms
  • 23-mal schneller als find

Integration mit anderen Programmen

  • fd-Suchergebnisse in fzf anzeigen: export FZF_DEFAULT_COMMAND='fd --type file'
  • fd-Ausgabe als Menü in rofi anzeigen: fd --type f -e pdf . $HOME | rofi -dmenu
  • Ausgabe in einer Baumstruktur darstellen: fd | tree --fromfile
  • Suchergebnisse mit xargs verwenden: fd -0 -e rs | xargs -0 wc -l

2 Kommentare

 
dbs0829 2025-03-20

Unter den Neovim-Plugins gibt es eins, das fd verwendet, also habe ich es installiert und benutze es seitdem, haha.

 
GN⁺ 2025-03-20
Hacker-News-Kommentare
  • Habe einen Alfred-Workflow veröffentlicht. Nutze fd häufig, um benutzerdefinierte Verzeichnisse zu durchsuchen. Verwende es täglich und es ist hervorragend.
    • hyperfine ist ebenfalls ein großartiges, unterschätztes Tool.
  • Ich bin ein Fan von sharkdp. Danke, dass du großartige Software entwickelst, die ich täglich nutze.
    • Ich verwende bat, fd, hexyl und hyperfine.
    • Wenn gut bezahlte Ingenieure jeden Monat 10 $ spenden würden, wäre das Internet besser.
    • Es gibt viele großartige Tools, und wir sollten ein Ökosystem schaffen, das sie unterstützt.
  • Man kann fd, bat, numbat, hexyl und hyperfine schnell installieren und auf Terminal Trove Screenshots davon sehen.
    • Links zu fd, bat, numbat, hyperfine und hexyl werden bereitgestellt.
    • Installation und Screenshots können angesehen werden.
  • Ich wünschte, die Flags von fd und rg würden übereinstimmen. Zum Beispiel haben sowohl fd als auch rg das Flag --type, aber es bedeutet etwas anderes.
    • Bei fd bedeutet es Datei/Verzeichnis/symbolischer Link usw., bei rg den MIME-Typ der Datei.
    • fd hat das Flag --extension, rg jedoch nicht.
    • Da die Nutzung der beiden Tools stark korreliert, wären ähnlich benannte Flags hilfreich.
  • Der Grund, warum ich neue Rust-Tools nicht verwende, ist, dass es schwer ist, sich die Optionen der ursprünglichen Tools zu merken.
    • Ich verwende ripgrep in VS Code, aber auf der Kommandozeile nutze ich grep.
    • Solange ein Tool einfach funktioniert, ist es mir egal, in welcher Sprache es geschrieben ist.
    • GNU Stow ist in Perl geschrieben, aber eines meiner liebsten Unix-Tools.
    • Selbst wenn ein Rust-Tool ein Drop-in-Ersatz ist, würde ich es nicht manuell installieren.
    • Als Nutzer sind mir Geschwindigkeitsverbesserungen und Speichersicherheit nicht wichtig.
    • Andere Sprachen wie Go garantieren ebenfalls Speichersicherheit, und auch die Beteiligung der Community ist hoch.
    • Ich bin von der Erzählung, dass Rust der Retter sei, nicht vollständig überzeugt.
    • Wenn macOS oder Ubuntu es durch Rust-Ersatztools austauschen würden und mein Workflow nicht beeinträchtigt wäre, hätte ich nichts dagegen.
  • Ich sollte Terminal Trove gelegentlich anschauen.
    • Dort kann man leicht Ersatz für häufig genutzte Tools finden.
    • find kann durch fd, time durch hyperfine und grep durch ripgrep ersetzt werden.
    • Dazu kommen t-rec, das asciinema in .gif umwandelt, und koji, das manuelle Commits erstellt.
  • Ich werde fd wohl ausprobieren. Es ist schwer, sich die Argumentverwendung von find zu merken, deshalb nutze ich meist find . | grep what_i_am_looking_for.
    • Mir gefällt das integrierte Verhalten mit xargs.
    • Ich konnte nicht herausfinden, wie fd mit dem Durchqueren von Symlink-Verzeichnissen umgeht.
  • Ich nutze fd jeden Tag intensiv und installiere es standardmäßig auf neuen Geräten.
    • Ich habe lange find verwendet, aber benutzerfreundlich ist es nicht.
    • Ich stimme dem jüngsten Trend zu Ersatz-Utilities zu 100 % zu.
    • Vielleicht behalten sie nicht die gesamte Flexibilität des Originals bei, aber für typische Anwendungsfälle sind sie viel einfacher zu benutzen.
  • Es ist unpraktisch, dass standardmäßig viele Ordner ignoriert werden.
    • Wenn ich wissen will, wo sich etwas im System befindet, nutze ich find.
    • fd hat zwar eine Option, um nichts zu ignorieren, aber ich kann sie mir nicht merken und kehre dann zu find zurück.
  • Ich mag neue Rust-CLI-Tools, aber bei fd ist die Benutzung ähnlich schwer zu merken wie bei tar und ln.
    • Das ist niemandes Schuld.
    • Ich muss immer wieder das Handbuch lesen.
    • Trotz aller Eigenheiten von GNU find kann ich mir das besser merken.