Die üblichen Terminal-Shells (bash, fish, zsh, usw.) bieten von Haus aus keine Unterstützung für einen schnellen Verzeichniswechsel. Dort hangelt man sich mit cd von Ordner zu Ordner. Vor vier Jahren habe ich einen Artikel über das Skript Z geschrieben, das einen schnellen Verzeichniswechsel ermöglicht. Seitdem verwende ich Z für diese Aufgabe. Nun hat eine Leserin oder ein Hörer (leider finde ich die Quelle nicht mehr) darauf hingewiesen, dass Z seit Jahren nicht mehr gepflegt wird und man stattdessen Zoxide verwenden kann. Mit Vorteil kann man gleich noch den Fuzzy Finder fzf installieren, da dieser bei manchen Funktionen von Zoxide verwendet wird.
Installation
Sowohl Zoxide als auch fzf sind in den Repositories der bekannten Distribution vorhanden und lassen sich mit deren Paketmanagern bequem installieren. Ich bin mir nicht sicher, ob die Installation auch einen Zusatz in der Shell-Konfiguration beinhaltet. Das lässt sich leicht nachsehen und ggf. ergänzen. Bei der Z-Shell heisst die Konfigurationsdatei .zshrc und befindet sich im Home-Verzeichnis. Für Zoxide und fzf muss dort am Ende der Datei jeweils eine Zeile eingefügt werden:
# Ralf: fast directory switch eval "$(zoxide init zsh)" source <(fzf --zsh)Es lohnt sich, den Eintrag zu kommentieren, damit man später weiss, was es damit auf sich hat. Dieser Eintrag ist für jede Shell anders, weshalb ihr hier schauen solltet, wie die Ergänzung für eure Shell heisst. Gleiches gilt für den fzf Eintrag, den ihr hier findet. Danach solltet ihr das Terminal schliessen und wieder öffnen.
Funktioniert es?
Jetzt könnt ihr im Terminal testen, ob der schnelle Verzeichniswechsel funktioniert. Dazu wechselt ihr zuerst mit cd in ein paar willkürliche Verzeichnisse. Das ist nötig, damit Zoxide sich das merken und priorisieren kann. Angenommen ihr seid vorher in das Verzeichnis /home/Dokumente gewechselt, könnt ihr nun (von beliebiger Stelle im Verzeichnisbaum) das ausprobieren:
Falls ihr wissen möchtet, welche Verzeichnisse Zoxide kennt, gebt ihr das ein: zoxide edit
Bei einem z do ist nicht klar, welches Verzeichnis gemeint ist (Downloads oder Dokumente). In diesem Fall könnt ihr z do SPACE + TAB eingeben, worauf Zoxide eine Auswahl präsentiert:
Auf den Quellseiten findet ihr noch weitere Funktionen von Zoxide. Das gilt auch für den Fuzzy Finder fzf, auf den ich hier nicht näher eingehen werde. Dennoch könnt ihr testen, ob die Installation funktioniert hat. Dazu gebt ihr im Terminal fzf ein. Nun solltet ihr eine lange Liste von Dateien sehen, in denen ihr suchen könnt.
Pro Tipp
Aber Ralf, warum muss ich denn erst in jedes Verzeichnis cd'en, bevor Zoxide es kennt? Damit das Werkzeug das Ranking ermitteln kann. Ja, aber geht das nicht anders? Doch, man kann Zoxide mit Verzeichnissen anfüttern. Dafür gibt es das Kommando zoxide import. Damit kann man dem Tool eine Verzeichnisliste unterjubeln.
Doch wie erstellt man eine Verzeichnisliste? Ganz einfach, mit: find . -type d. Aber Achtung, das wollt ihr nicht, weil damit auch alle hidden-Verzeichnisse gemeint sind (die mit dem Punkt vor dem Verzeichnisnamen). Ich wollt nicht tausende Cache-Verzeichnisse von Firefox usw. aufnehmen. Selbstverständlich kann man die hidden-Verzeichnisse ausschliessen und das Ergebnis in eine Datei schreiben. Das geht so:
find . ! -path '*/.*' -type d > verzeichnisse.txtDas sind dann immer noch ein paar tausend Verzeichnisse. Bevor ihr diese Liste an Zoxide verfüttert, könnt ihr in die Datei schauen und entscheiden, ob ihr das wirklich möchtet. Nun wird es etwas schwierig, weil Zoxide eine Textdatei mit Verzeichnissen nicht importieren kann. Zwar gibt es das Kommando zoxide import, dort da blicke ich nicht durch. Mit dem Kommando zoxide add kann man einzelne Pfade importieren. Also basteln wir ein Shell-Skript, welches diese Aufgabe übernimmt. In der Datei verzeichnisse.txt sieht es z. B. so aus:
./Books/Aufbruch mit den Hobbits.[rtf_jpg_nfo]/Hobbit-Presse (Hrsg.) (77) ./Books/Eco_ Umberto ./Books/Eco_ Umberto/Der Name der Rose (375) ./Books/Eco_ Umberto/Wie man mit einem Lachs verreist (379) ./Books/Eco_ Umberto/Uber Gott und die Welt (371) ./Books/Eco_ Umberto/Derrick oder die Leidenschaft fur das Mittelmass (362)Damit kann Zoxide gar nichts anfangen. Deshalb machen wir den Anfang vom Pfad vollständig und quoten den Pfad:
# den String ./ durch den String zoxide add "/home/ralf/ ersetzen sed -i 's/\.\//zoxide add "\/home\/ralf\//g' verzeichnisse.txt # Gänsefüsschen an das Ende jeder Zeile setzten sed -i s/$/\"/ verzeichnisse.txtDann machen wir daraus ein Shell-Skript, indem wir ein #!/bin/bash in die erste Zeile setzen und die Datei umbenenen (verzeichnisse.sh) und ausführbar machen. So soll es aussehen:
#!/bin/bash zoxide add "/home/ralf/dev" zoxide add "/home/ralf/dev/fedigov" zoxide add "/home/ralf/dev/fedigov/site"Als letzten Schritt wird das Skript ausgeführt: ./verzeichnisse.sh. Dann kommt die Probe mit: z mond SPACE + TAB:
Perfekt! Die beiden ersten Verzeichnisse sind (mit 8.0) höher gerankt, weil ich diese mit z mond vor dem Screenshot aufgerufen habe.
Fazit
Zoxide ist ein guter Ersatz für das Z-Skript und wird genauso bedient wie Z. Mit dem oben vorgestellten Verfahren kann man alle gewünschten Verzeichnisse in einem Rutsch in den Index von Zoxide einlesen. Danach hat man eine umfassende Suche für den schnellen Verzeichniswechsel zur Verfügung.
Titelbild: https://pixabay.com/photos/girl-leap-clouds-pleasure-heaven-5305455/
Quellen:
https://github.com/ajeetdsouza/zoxide
https://github.com/junegunn/fzf
GNU/Linux.ch ist ein Community-Projekt. Bei uns kannst du nicht nur mitlesen, sondern auch selbst aktiv werden. Wir freuen uns, wenn du mit uns über die Artikel in unseren Chat-Gruppen oder im Fediverse diskutierst. Auch du selbst kannst Autor werden. Reiche uns deinen Artikelvorschlag über das Formular auf unserer Webseite ein.