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)