Fuzzy Finder - Einfacher am Linux-Terminal suchen

Wiki rund um das Terminal unter Linux
Benutzeravatar
robertgoedl
Administrator
Beiträge: 1317
Registriert: Sa 10. Jul 2021, 01:47
Wohnort: Graz
Has thanked: 150 times
Been thanked: 777 times
Kontaktdaten:

Fuzzy Finder - Einfacher am Linux-Terminal suchen

Beitrag von robertgoedl »

Weiß man unter Linux am Terminal nicht genau, wonach man sucht, nutzt man normalerweise den Befehl:
mit allen seinen Optionen, regulären Ausdrücken und Schaltern - sucht also etwa nach Dateien oder Verzeichnissen. Mit Fuzzy Finder nutzen Sie eine sogenannte unscharfe Suche und dies ganz interaktiv. Neben Verzeichnissen und Dateien lassen sich auch ein Befehlsverlauf, Prozesse, Hostnamen (etwa für SSH), Lesezeichen und GitHub-Commits und vieles mehr suchen.

Wir sehen uns diese Software jetzt etwas näher an.

Fuzzy Finder installieren

Unter auf Debian basierenden Linux-Distributionen installieren Sie diese Software wie üblich ganz einfach über die Paket-Verwaltung durch das Paket "fzf", genauso wie unter Void Linux. Auch die meisten anderen Linux-Distributionen bringen das Paket in ihren Repositorys mit.

Fuzzy Finder nutzen

Versuchen wir einmal, einen ganz einfachen Befehl mit "find" - einfach auf dem Terminal eingeben:

Code: Alles auswählen

find * -type f | fzf > selected
Der Befehl "find" sucht ganz einfach nach regulären Dateien und übergibt diese an "fzf" - was wir erhalten, ist eine interaktive Suche:
Fuzzy Finder - Einfacher am Linux-Terminal suchen
Fuzzy Finder - Einfacher am Linux-Terminal suchen
Jetzt können wir einfach beginnen einzutippen - etwa "myself":
Fuzzy Finder - Einfacher am Linux-Terminal suchen
Fuzzy Finder - Einfacher am Linux-Terminal suchen
Die Software liefert nur noch passende Ergebnisse und natürlich das Verzeichnis, in dem die Datei oder das Verzeichnis liegt. Haben Sie den Dienst "locate" installiert, funktioniert dies natürlich auch:

Code: Alles auswählen

locate / | fzf
Alternativ starten Sie den Befehl einfach mittels:
Dies kann beim Start ein wenig länger dauern - aber die zwei Sekunden hat man oft Zeit.

Wir können gleich beim Start das Gesuchte mit der Option "-q begriff" mitgeben - etwa:

Code: Alles auswählen

fzf -q 'begriff'
Fuzzy Finder - Einfacher am Linux-Terminal suchen
Fuzzy Finder - Einfacher am Linux-Terminal suchen
Auf diese Weise können wir auch unscharf suchen - wir wissen also nicht den kompletten Begriff. Hier die Möglichkeiten:
  • ^debian - Begriffe, die mit "debian" beginnen
  • debian$ - Begriffe, die mit "debian" enden
  • !debian - Begriffe, die "debian" nicht enthalten
  • 'debian - Begriffe, die "debian" exakt enthalten
Ein Beispiel:

Code: Alles auswählen

fzf -q ^debian
Sie können sich Textdateien auch direkt in der Suche ansehen, hierzu starten Sie die Software mit dem Befehl:

Code: Alles auswählen

fzf --preview 'cat {}'
Fuzzy Finder - Einfacher am Linux-Terminal suchen
Fuzzy Finder - Einfacher am Linux-Terminal suchen
Folgende Einstellungen in der Konfiguration der Shell (.bashrc und .zshrc) sind hilfreich - einfach kopieren und einfügen:

Code: Alles auswählen

# Use ~~ as the trigger sequence instead of the default **
export FZF_COMPLETION_TRIGGER='~~'

# Options to fzf command
export FZF_COMPLETION_OPTS='--border --info=inline'

# Use fd (https://github.com/sharkdp/fd) instead of the default find
# command for listing path candidates.
# - The first argument to the function ($1) is the base path to start traversal
# - See the source code (completion.{bash,zsh}) for the details.
_fzf_compgen_path() {
  fd --hidden --follow --exclude ".git" . "$1"
}

# Use fd to generate the list for directory completion
_fzf_compgen_dir() {
  fd --type d --hidden --follow --exclude ".git" . "$1"
}

# (EXPERIMENTAL) Advanced customization of fzf options via _fzf_comprun function
# - The first argument to the function is the name of the command.
# - You should make sure to pass the rest of the arguments to fzf.
_fzf_comprun() {
  local command=$1
  shift

  case "$command" in
    cd)           fzf "$@" --preview 'tree -C {} | head -200' ;;
    export|unset) fzf "$@" --preview "eval 'echo \$'{}" ;;
    ssh)          fzf "$@" --preview 'dig {}' ;;
    *)            fzf "$@" ;;
  esac
}
Windows lässt sich mit einem U-Boot vergleichen - mach ein Fenster auf und die Probleme beginnen ...
Benutzeravatar
Rocki
Beiträge: 343
Registriert: Fr 16. Jul 2021, 01:58
Wohnort: Schweiz
Has thanked: 456 times
Been thanked: 109 times

Re: Fuzzy Finder - Einfacher am Linux-Terminal suchen

Beitrag von Rocki »

Eine super Sache. Bei folgenden beiden Eingaben bekomme ich aber immer auf einer neuen Zeile dieses Zeichen: >

Code: Alles auswählen

locate / | fzf

Code: Alles auswählen

fzf -q 'debian
Was jetzt?
«Wer alles weiss, hat keine Ahnung.» – Horst Evers
Benutzeravatar
robertgoedl
Administrator
Beiträge: 1317
Registriert: Sa 10. Jul 2021, 01:47
Wohnort: Graz
Has thanked: 150 times
Been thanked: 777 times
Kontaktdaten:

Re: Fuzzy Finder - Einfacher am Linux-Terminal suchen

Beitrag von robertgoedl »

Rocki hat geschrieben: So 20. Nov 2022, 01:04 Eine super Sache. Bei folgenden beiden Eingaben bekomme ich aber immer auf einer neuen Zeile dieses Zeichen: >

Code: Alles auswählen

locate / | fzf

Code: Alles auswählen

fzf -q 'debian
Was jetzt?
Der erste Befehl 'sollte' eigentlich problemlos funktionieren - also:

Code: Alles auswählen

locate / | fzf
Den zweiten musste ich gerade selbst im Beitrag ausbessern - also:

Code: Alles auswählen

fzf -q 'debian
Hier habe ich das zweite Anführungszeichen >'< vergessen - dieses schließt den Befehl ab. Es ist vor allem dazu gedacht, Begriffe mit Leerzeichen anzugeben. Der Befehl wird also einfach nicht abgeschlossen und Du bekommst die Meldung:

Code: Alles auswählen

quote>
Hier könntest Du etwa weitere Begriffe abgeben oder den Befehl einfach mit einem >'< abschließen:

Code: Alles auswählen

fzf -q 'debian
quote> 
quote> linux
quote> 
quote> '
Windows lässt sich mit einem U-Boot vergleichen - mach ein Fenster auf und die Probleme beginnen ...
Benutzeravatar
Rocki
Beiträge: 343
Registriert: Fr 16. Jul 2021, 01:58
Wohnort: Schweiz
Has thanked: 456 times
Been thanked: 109 times

Re: Fuzzy Finder - Einfacher am Linux-Terminal suchen

Beitrag von Rocki »

Danke, der Befehl mit 'debian' funktioniert jetzt auch bei mir prima, derjenige mit locate nicht. Ist die Frage, was er bringt. Ich kenne ihn kaum.
«Wer alles weiss, hat keine Ahnung.» – Horst Evers
Benutzeravatar
robertgoedl
Administrator
Beiträge: 1317
Registriert: Sa 10. Jul 2021, 01:47
Wohnort: Graz
Has thanked: 150 times
Been thanked: 777 times
Kontaktdaten:

Re: Fuzzy Finder - Einfacher am Linux-Terminal suchen

Beitrag von robertgoedl »

Locate ist so gesehen eine kleine Datenbank, diese durchsucht das komplette Dateisystem in Intervallen und speichert alle Dateien und Verzeichnisse in ihrer Datenbank. So lassen sich Daten schneller finden - natürlich nur, wenn diese schon in der Datenbank liegen.
Windows lässt sich mit einem U-Boot vergleichen - mach ein Fenster auf und die Probleme beginnen ...
Benutzeravatar
Rocki
Beiträge: 343
Registriert: Fr 16. Jul 2021, 01:58
Wohnort: Schweiz
Has thanked: 456 times
Been thanked: 109 times

Re: Fuzzy Finder - Einfacher am Linux-Terminal suchen

Beitrag von Rocki »

Heisst das, weil ich locate nicht benütze, kann fzf auch nichts finden - in der von locate angelegten Datenbank?
«Wer alles weiss, hat keine Ahnung.» – Horst Evers
Benutzeravatar
robertgoedl
Administrator
Beiträge: 1317
Registriert: Sa 10. Jul 2021, 01:47
Wohnort: Graz
Has thanked: 150 times
Been thanked: 777 times
Kontaktdaten:

Re: Fuzzy Finder - Einfacher am Linux-Terminal suchen

Beitrag von robertgoedl »

Rocki hat geschrieben: So 20. Nov 2022, 09:56 Heisst das, weil ich locate nicht benütze, kann fzf auch nichts finden - in der von locate angelegten Datenbank?
Die Datenbank von Locate wird nur dann genutzt, wenn diese auch zum Start von Fuzzy Finder genutzt wird. Aber wie gesagt - wird Locate genutzt, findet Fuzzy Finder Dateien schneller, die schon in der Datenbank liegen.

Locate durchsucht das Dateisystem einmal am Tag, Dateien, die noch nicht in der Datenbank von Locate liegen, findet Fuzzy Finder überhaupt nicht, wenn Fuzzy Finder mit Locate gestartet wird.

Schnell erklärt:
Fuzzy Finder und Locate
Fuzzy Finder und Locate
  • Fuzzy Finder findet Daten mit Locate schneller - besser gesagt, der Suchvorgang dauert ein, zwei Sekunden weniger lang. Neu hinzugekommene Dateien, die sich noch nicht in der Datenbank von Locate befinden, werden überhaupt nicht gefunden.
  • Fuzzy Finder ohne Locate gestartet findet alle im Dateisystem vorhandenen Dateien. Bis der Suchvorgang gestartet werden kann, dauert es jedoch ein, zwei Sekunden länger - das Dateisystem wird ja erst durchsucht.
Windows lässt sich mit einem U-Boot vergleichen - mach ein Fenster auf und die Probleme beginnen ...
LinuxOpa
Beiträge: 14
Registriert: Di 7. Dez 2021, 16:32
Has thanked: 8 times
Been thanked: 8 times

Re: Fuzzy Finder - Einfacher am Linux-Terminal suchen

Beitrag von LinuxOpa »

fzf könnte man die CLI-Version von Fsearch nennen bei der Anwendung "find / | fzf" oder "locate / | fzf"

cat Textdatei | fzf ist bei großen Texten auch nützlich

selbst cat Binärdatei | fzf funktioniert, um 'nen String zu suchen

feines kleines Stück Software 👍
sudo apt autoremove —purge windows -y
willst du gute Windows, dann geh zu CarGlass ;)
Benutzeravatar
robertgoedl
Administrator
Beiträge: 1317
Registriert: Sa 10. Jul 2021, 01:47
Wohnort: Graz
Has thanked: 150 times
Been thanked: 777 times
Kontaktdaten:

Re: Fuzzy Finder - Einfacher am Linux-Terminal suchen

Beitrag von robertgoedl »

LinuxOpa hat geschrieben: Mo 21. Nov 2022, 10:15 fzf könnte man die CLI-Version von Fsearch nennen bei der Anwendung "find / | fzf" oder "locate / | fzf"

cat Textdatei | fzf ist bei großen Texten auch nützlich

selbst cat Binärdatei | fzf funktioniert, um 'nen String zu suchen

feines kleines Stück Software 👍
Absolut, sucht man nach Textdateien, lassen sich diese, statt den Pfad anzusehen, auch mit einem beliebigen Texteditor bearbeiten. Es hat schon etwas.
Windows lässt sich mit einem U-Boot vergleichen - mach ein Fenster auf und die Probleme beginnen ...
Antworten Vorheriges ThemaNächstes Thema

Create an account or sign in to join the discussion

You need to be a member in order to post a reply

Create an account

Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute

Registrieren

Sign in