{"id":665,"date":"2023-09-03T10:54:35","date_gmt":"2023-09-03T08:54:35","guid":{"rendered":"https:\/\/linux-bibel.at\/?p=665"},"modified":"2023-09-03T10:54:37","modified_gmt":"2023-09-03T08:54:37","slug":"fuzzy-finder-einfacher-am-linux-terminal-suchen","status":"publish","type":"post","link":"https:\/\/linux-bibel.at\/index.php\/2023\/09\/03\/fuzzy-finder-einfacher-am-linux-terminal-suchen\/","title":{"rendered":"Fuzzy Finder &#8211; Einfacher am Linux-Terminal suchen"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Wei\u00df man unter Linux am\u00a0Terminal\u00a0nicht genau, wonach man sucht, nutzt man normalerweise den Befehl:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>find<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">mit allen seinen Optionen, regul\u00e4ren Ausdr\u00fccken und Schaltern &#8211; 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 (<em>etwa f\u00fcr SSH<\/em>), Lesezeichen und GitHub-Commits und vieles mehr suchen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wir sehen uns diese Software jetzt etwas n\u00e4her an.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fuzzy Finder installieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Unter auf Debian basierenden Linux-Distributionen installieren Sie diese Software wie \u00fcblich ganz einfach \u00fcber die\u00a0Paket-Verwaltung\u00a0durch das Paket &#8222;<strong>fzf<\/strong>&#8222;, genauso wie unter Void Linux. Auch die meisten anderen Linux-Distributionen bringen das Paket in ihren Repositorys mit.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fuzzy Finder nutzen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Versuchen wir einmal, einen ganz einfachen Befehl mit &#8222;<strong><code>find<\/code><\/strong>&#8220; &#8211; einfach auf dem Terminal eingeben:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>find * -type f | fzf &gt; selected<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Der Befehl &#8222;<strong><code>find<\/code><\/strong>&#8220; sucht ganz einfach nach regul\u00e4ren Dateien und \u00fcbergibt diese an &#8222;<strong><code>fzf<\/code><\/strong>&#8220; &#8211; was wir erhalten, ist eine interaktive Suche:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-1024x576.jpg\" alt=\"\" class=\"wp-image-666\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-1024x576.jpg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-300x169.jpg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-768x432.jpg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-1536x864.jpg 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Jetzt k\u00f6nnen wir einfach beginnen einzutippen &#8211; etwa &#8222;<strong>myself<\/strong>&#8222;:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-1-1024x576.jpg\" alt=\"\" class=\"wp-image-667\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-1-1024x576.jpg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-1-300x169.jpg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-1-768x432.jpg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-1-1536x864.jpg 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-1.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Die Software liefert nur noch passende Ergebnisse und nat\u00fcrlich das Verzeichnis, in dem die Datei oder das Verzeichnis liegt. Haben Sie den Dienst &#8222;<strong><code>locate<\/code><\/strong>&#8220; installiert, funktioniert dies nat\u00fcrlich auch:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>locate \/ | fzf<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Alternativ starten Sie den Befehl einfach mittels:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fzf<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dies kann beim Start ein wenig l\u00e4nger dauern &#8211; aber die zwei Sekunden hat man oft Zeit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wir k\u00f6nnen gleich beim Start das Gesuchte mit der Option &#8222;<strong><code>-q begriff<\/code><\/strong>&#8220; mitgeben &#8211; etwa:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fzf -q 'begriff'<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-2-1024x576.jpg\" alt=\"\" class=\"wp-image-668\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-2-1024x576.jpg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-2-300x169.jpg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-2-768x432.jpg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-2-1536x864.jpg 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-2.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Auf diese Weise k\u00f6nnen wir auch unscharf suchen &#8211; wir wissen also nicht den kompletten Begriff. Hier die M\u00f6glichkeiten:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>^debian<\/strong>&nbsp;&#8211; Begriffe, die mit &#8222;<strong>debian<\/strong>&#8220; beginnen<\/li>\n\n\n\n<li><strong>debian$<\/strong>&nbsp;&#8211; Begriffe, die mit &#8222;<strong>debian<\/strong>&#8220; enden<\/li>\n\n\n\n<li><strong>!debian<\/strong>&nbsp;&#8211; Begriffe, die &#8222;<strong>debian<\/strong>&#8220; nicht enthalten<\/li>\n\n\n\n<li><strong>&#8218;debian<\/strong>&nbsp;&#8211; Begriffe, die &#8222;<strong>debian<\/strong>&#8220; exakt enthalten<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Beispiel:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fzf -q ^debian<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sie k\u00f6nnen sich Textdateien auch direkt in der Suche ansehen, hierzu starten Sie die Software mit dem Befehl:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fzf --preview 'cat {}'<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-3-1024x576.jpg\" alt=\"\" class=\"wp-image-669\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-3-1024x576.jpg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-3-300x169.jpg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-3-768x432.jpg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-3-1536x864.jpg 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/fzf-3.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Folgende Einstellungen in der Konfiguration der Shell (<em>.bashrc und .zshrc<\/em>) sind hilfreich &#8211; einfach kopieren und einf\u00fcgen:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CODE:&nbsp;<a href=\"https:\/\/www.linux-bibel-oesterreich.at\/viewtopic.php?t=1113#\">ALLES AUSW\u00c4HLEN<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Use ~~ as the trigger sequence instead of the default **\nexport FZF_COMPLETION_TRIGGER='~~'\n\n# Options to fzf command\nexport FZF_COMPLETION_OPTS='--border --info=inline'\n\n# Use fd (https:\/\/github.com\/sharkdp\/fd) instead of the default find\n# command for listing path candidates.\n# - The first argument to the function ($1) is the base path to start traversal\n# - See the source code (completion.{bash,zsh}) for the details.\n_fzf_compgen_path() {\n  fd --hidden --follow --exclude \".git\" . \"$1\"\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">So kann man bei Fuzzy Finder (fzf) Funde mit einem Klick \u00f6ffnen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Das Terminal-Programm\u00a0<strong>Fuzzy Finder<\/strong>\u00a0(fzf) wird auf der Linux-Bibel \u00d6sterreich\u00a0hier\u00a0vorgestellt. Es ist unglaublich schnell und n\u00fctzlich und erspart einem viele Klicks. Kein &#8222;Wo habe ich jetzt nur diese Datei gespeichert?&#8220;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vermissen daran tue ich nur, dass der Fund nur \u00fcber Umwege ge\u00f6ffnet werden kann. Mit dem folgenden\u00a0<strong>Script<\/strong>\u00a0geht das \u00d6ffnen jetzt aber super einfach mit einem Klick &#8211; einfacher gehts wirklich nicht:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n\n# F\u00fchre fzf aus und speichere das Ergebnis in der Variable \"selected_files\"\nselected_files=$(fzf)\n\n# Schleife durch jede ausgew\u00e4hlte Datei\nfor file in \"$selected_files\"; do\n  # \u00d6ffne die Datei durch Anklicken, auch wenn der Dateiname Leerzeichen enth\u00e4lt\n  xdg-open \"$file\"\ndone<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Das Script installieren<\/strong><br>1 Rauskopieren<br>2 In einen einfachen Editor einf\u00fcgen<br>3 Speichern unter irgendeinem Namen (ohne Dateiendung), im Beispiel unten&nbsp;<em>fzff<\/em><br>4 Am einfachsten im Verzeichnis&nbsp;<em>~\/.local\/bin\/<\/em><br>5 Die Datei ausf\u00fchrbar machen mit&nbsp;<em>chmod +x ~\/.local\/bin\/fzff<\/em>&nbsp;(Terminal)<br>6 Fertig<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Jetzt fzff n\u00fctzen<\/strong><br>1 Im Terminal&nbsp;<em>fzff<\/em>&nbsp;eingeben<br>2&nbsp;<em>Enter<\/em>&nbsp;&#8211; eine Liste wird erstellt<br>2 Einfach das Suchwort (oder mehrere) schreiben (ohne Anf\u00fchrungszeichen)<br>4 Die Liste zeigt alle Zeilen mit dem Suchwort bzw. mit Buchstaben davon<br>5 Ist die Zeile mit dem roten Winkel davor die richtige &#8211;&nbsp;<em>Enter<\/em>&nbsp;dr\u00fccken<br>6 Sonst mit den Pfeiltasten hinauf und hinunter zur richtigen Zeile &#8211;&nbsp;<em>Enter<\/em>&nbsp;&#8211; die gesuchte Datei wird sofort mit dem Standard-Programm f\u00fcr diesen Dateityp ge\u00f6ffnet<br>7 Man kann auch einfach einzelne beliebige Zeilen mit der linken Maustaste doppelt anklicken (evtl. abh\u00e4ngig vom Terminal, das man ben\u00fctzt)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier ein Beispiel f\u00fcr einen Fund:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"909\" height=\"402\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/Suche-nach-Omelette.png\" alt=\"\" class=\"wp-image-670\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/Suche-nach-Omelette.png 909w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/Suche-nach-Omelette-300x133.png 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/Suche-nach-Omelette-768x340.png 768w\" sizes=\"auto, (max-width: 909px) 100vw, 909px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Bei der Zeile mit dem roten Winkel davor gen\u00fcgt ein&nbsp;<em>Enter<\/em>-Druck &#8211; bei jeder der Zeilen ein doppelter Mausklick &#8211; und die Datei wird ge\u00f6ffnet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bekommt man eine Fehlermeldung wie &#8222;Das Adressschema von &#8230; konnte nicht erkannt werden&#8220;, muss man wahrscheinlich die Datei ~\/.config\/mimeapps.list \u00f6ffnen und passende Eintr\u00e4ge hinzuf\u00fcgen. Oder ich musste bei mir in der \/etc\/xfce-mimeapps.list alles unter dem Titel [Added Associations] l\u00f6schen (mit Admin-Rechten). Aber Vorsicht!<\/p>\n\n\n\n<p class=\"has-light-green-cyan-color has-text-color wp-block-paragraph\">Verfasst mit Hilfe von Rocki<\/p>\n<div class=\"pld-like-dislike-wrap pld-custom\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir\" data-post-id=\"665\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Hoch.png\" alt=\"Gef\u00e4llt mir\" \/>\r\n            <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">    <\/span>\r\n<\/div><div class=\"pld-dislike-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-dislike-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir nicht\" data-post-id=\"665\" data-trigger-type=\"dislike\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Runter.png\" alt=\"Gef\u00e4llt mir nicht\" \/>\r\n            <\/a>\r\n    <span class=\"pld-dislike-count-wrap pld-count-wrap\"><\/span>\r\n<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Wei\u00df man unter Linux am\u00a0Terminal\u00a0nicht genau, wonach man sucht, nutzt man normalerweise den Befehl: mit allen seinen Optionen, regul\u00e4ren Ausdr\u00fccken und Schaltern &#8211; 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 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":669,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[12,7,6],"class_list":["post-665","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-terminal","tag-kommandozeile","tag-shell","tag-terminal"],"_links":{"self":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/665","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/comments?post=665"}],"version-history":[{"count":1,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/665\/revisions"}],"predecessor-version":[{"id":671,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/665\/revisions\/671"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media\/669"}],"wp:attachment":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media?parent=665"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/categories?post=665"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/tags?post=665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}