GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Fuzzy-Dateisuche in der Linux-Konsole

Die meisten dieser Antworten führen keine Fuzzy-Suche durch, wie es bei erhabenem Text der Fall ist - sie stimmen möglicherweise mit einem Teil der Antwort überein, aber sie zeigen nicht das nette Verhalten "Einfach alle Buchstaben in dieser Reihenfolge finden".

Ich denke, das ist etwas näher an dem, was Sie wollen. Ich habe eine spezielle Version von cd ('fcd') zusammengestellt, die Fuzzy-Suche verwendet, um das Zielverzeichnis zu finden. Supereinfach – fügen Sie einfach dies zu Ihrem bashrc hinzu:

function joinstr { local IFS="$1"; shift; echo "$*"; }
function fcd { cd $(joinstr \* $(echo "$*" | fold -w1))* }

Dadurch wird ein * zwischen jedem Buchstaben in der Eingabe eingefügt, also wenn ich zum Beispiel zu gehen möchte,

/home/dave/results/sample/today

Ich kann einfach Folgendes eingeben:

fcd /h/d/r/spl/t
fcd /h/d/r/s/t
fcd /h/d/r/sam/t
fcd /h/d/r/s/ty

Am Beispiel des ersten Beispiels wird cd /*h*/*d*/*r*/*s*p*l*/*t* ausgeführt und lassen Sie die Shell herausfinden, was tatsächlich passt.

Solange das erste Zeichen korrekt ist und ein Buchstabe aus jedem Verzeichnis im Pfad geschrieben wird, wird es finden, wonach Sie suchen. Vielleicht kannst du das für deine Bedürfnisse anpassen? Das wichtige Bit ist:

$(joinstr \* $(echo "$*" | fold -w1))*

wodurch die Fuzzy-Suchzeichenfolge erstellt wird.


Sie können fzf nützlich finden. Es ist ein in Go geschriebener Allzweck-Fuzzy-Finder, der mit jeder Liste von Dingen verwendet werden kann:Dateien, Prozesse, Befehlsverlauf, Git-Zweige usw.

Sein Installationsskript wird CTRL-T einrichten Tastenbelegung für Ihre Shell. Das folgende GIF zeigt, wie es funktioniert.


Normalerweise verwende ich:

ls -R | grep  -i [whatever I can remember of the file name]

Von einem Verzeichnis über dem, wo ich die Datei erwarte - je höher Sie im Verzeichnisbaum gehen, desto langsamer wird es gehen.

Wenn ich den genauen Dateinamen finde, verwende ich ihn in find:

find . [discovered file name]

Dies könnte in einer Zeile zusammengefasst werden:

for f in $(ls --color=never -R | grep --color=never -i partialName); do find -name $f; done

(Ich habe ein Problem mit ls und grep gefunden, die den Aliasnamen "--color=auto" haben)


Linux
  1. So suchen und entfernen Sie Verzeichnisse rekursiv unter Linux

  2. So finden Sie eine Datei in Linux

  3. So finden Sie die älteste Datei in einem Verzeichnisbaum in Linux

  4. Suchen Sie die Datei und wechseln Sie dann in dieses Verzeichnis in Linux

  5. Linux-Löschdatei mit Größe 0

So finden Sie Dateien basierend auf dem Zeitstempel in Linux

So finden Sie Dateien, die eine bestimmte Textzeichenfolge in Linux enthalten

So finden Sie Dateien, die in den letzten 24 Stunden in Linux geändert wurden

So finden Sie die längste(n) Zeile(n) in einer Datei in Linux

Finden Sie Befehl in Linux/UNIX

So führen Sie eine Fuzzy-Dateisuche unter Linux durch