Fryboyter

Nicht benötigte Dateiformate einer Datei löschen

Nehmen wir an, dass in einem Verzeichnis Dateien mit gleichem Inhalt aber in unterschiedlichen Dateiformaten vorliegen. Also beispielsweise Datei.txt, Datei.epub und Datei.pdf. Oftmals benötigt man die jeweilige Datei aber nur in einem bestimmten Format.

Natürlich kann man die nicht benötigten Dateien manuell löschen. Einfacher wäre es aber, wenn man automatisch alle Dateien bis auf die, die man behalten will, löschen kann. Will man beispielsweise nur die EPUB-Dateien behalten kann man dies, zumindest mit der ZSH, mit dem Befehl rm ‐‐ ^*.epub machen. Hiermit werden alle Dateien bis auf die mit der Dateiendung .epub gelöscht. Damit der Befehl funktioniert muss “extended glob” aktiviert sein. Entweder indem man vorher den Befehl setopt EXTENDED_GLOB ausführt bzw. diesen in eine Konfigurationsdatei der ZSH einträgt.

Ob der Befehl auch mit einer anderen Shell wie der Bash funktioniert, kann ich nicht garantieren.

OSBN

Fuzzy Finder für die ZSH

Gestern hatte ich in einem Anfall von Wahnsinn meine Konfiguration der ZSH aufgeräumt. Anstelle von zwei Dateien habe ich nun sieben mit ziemlich viel Kommentaren. Dafür kann man endlich nachvollziehen welcher Eintrag was macht und es ist alles ordentlicher. Nur beim Aufräumen ist aber nicht geblieben.

Die Suchfunktion in der Historie hat mir in letzter Zeit irgendwie nicht mehr zugesagt. Daher habe ich fzf (command-line fuzzy finder) getestet. Nach dem Installieren des Pakets muss man nur folgende Einträge in die .zshrc eintragen.

source /usr/share/fzf/key-bindings.zsh
source /usr/share/fzf/completion.zsh

Wenn man nun mittels Strg + R in der Historie suchen will erhält man erst einmal eine etwas ungewohnte Anzeige, die aus den letzten Einträgen besteht. Erst einmal nichts Besonderes. Sucht man aber beispielsweise nach “pac” für pacman, bekommt man schon deutlich besser aufbereitet Ergebnisse angezeigt.

fzf zsh

Mit den Cursortasten lässt sich dann der gewünschte Eintrag auswählen. Angezeigt werden wohl standardmäßig immer 8 Einträge. Wenn mehr Einträge vorhanden sind, kann man allerdings auch weiter nach oben scrollen.

Fzf lässt sich aber nicht nur für die Historie der Shell nutzen. Verwendet man anstelle von Strg + R Strg + T kann man “fuzzy” nach Dateien und Verzeichnissen suchen. Hierbei wird allerdings das normale find verwendet. Somit ist zumindest dieser Teil, gerade bei vielen Dateien nicht gerade schnell. So wie der Sourcecode aussieht kann man diesen aber vermutlich schnell anpassen, dass stattdessen das schnellere fd verwendet wird. Ein weiterer Shortcut wäre ALT + S mit dem man nach Verzeichnissen suchen und direkt in diese wechseln kann.

Alles in allem konnte ich mit fzf nun drei Erweiterungen komplett ablösen. Diese habe zwar keine Probleme gemacht, aber weniger ist ab und zu auch mehr. Fzf sollte meines Wissens nach auch unter Fish und Bash funktionieren.

Linux | OSBN

ZSH-Alias mit Platzhalter

Derzeit teste ich mal wieder AUR-Helper. Da ich mir die Parameter usw. nicht merken will, lege ich normalerweise Aliase an. Für das Suchen im AUR wäre ein möglicher Alias zum Beispiel alias aurs=‘trizen -Ssa’. Derzeit teste ich den AUR-Helper aurman.

Hier wäre der Befehl nur im AUR nach Paketen zu suchen aurman -Ss Suchbegriff –aur. Da in diesem Fall der Suchbegriff mitten im Befehl steht, klappt ein Alias wie aurs=‘aurman -Ss –aur’ nicht wirklich. In den Alias einen Platzhalter zu packen (aurs=‘aurman -Ss $1 –aur’) funktioniert ebenfalls nicht. Die Lösung hierfür ist kein Alias, sondern eine Funktion.

Hierfür legen wir uns am besten ein extra Verzeichnis im Home-Verzeichnis an. Beispielsweise .zfunc. In diesem erstellen wir nun die Datei aursearch und füllen diese mit folgendem Inhalt und speichern diese anschließend.

function aurs() {
aurman -Ss $1 --aur
}

Anstelle von aurs geben wir den Namen ein, über den wir die Funktion aufrufen wollen. Da bei mir die Aliase für den AUR-Helper normalerweise aurs (suchen), auri (installiere) und auru (aktualisieren) lauten habe ich mich hier für aurs entschieden.

Damit die Funktion automatisch zur Verfügung steht öffnen wir nun noch die Konfigurationsdatei von zsh (normalerweise .zshrc) und fügen dort folgende Zeile ein.

source ~/.zfunc/aursearch

Hierbei ist zu beachten, dass man den Namen der Datei angibt und nicht den Befehl mit dem man die Funktion ausführt.

Von nun an kann man nun mittels aurs Suchbegriff im AUR nach Paketen suchen. Eventuell vorhanden Aliase mit dem gleichen Namen sollte man aber vorher löschen bzw. auskommentieren.

Linux | OSBN

Teile des Pfads bis zum Slash unter der ZSH löschen

Nehmen wir einmal an, dass in der Historie der ZSH der Befehl “cd /home/nutzer/Downloads/Filme/Action” vorhanden ist. Was aber, wenn man nur in den Ordner Downloads wechseln will?

Eine Möglichkeit wäre, den Befehl aus der Historie aufzurufen und einfach Filme/Action zu löschen bevor man den Befehl ausführt. Oder man drückt einfach ALT + Backspace. Hier macht die ZSH allerdings Probleme. Anstelle bis beispielsweise rückwärts bis zum nächsten Slash zu löschen, wird bis zum nächsten Leerzeichen gelöscht. Somit wird aus “cd /home/nutzer/Downloads/Filme/Action” mit nur einem Shortcut “cd”. Irgendwie blöd. Also muss mal wieder meine .zshrc erweitert werden. In diese habe ich folgende Funktion gepackt.

function backward-kill-partial-word {
         local WORDCHARS="${WORDCHARS//[\/.]/}"
         zle backward-kill-word "$@"
     }
     zle -N backward-kill-partial-word
     for x in '^Xw' '^[^?' '^[^H'; do
         bindkey "$x" backward-kill-partial-word
     done; unset x
 

Mittels WORDCHARS wir hierbei definiert, dass auch / Teil eines Worts ist. Speichert man nun die .zshrc und läd diese mittels “source ~/.zshrc” erneut ein lässt sich nun ein eingegebener Pfad mittels ALT + Backspace bis zum jeweils nächsten Slash rückwärts löschen.

Linux | OSBN

Lesezeichen für Verzeichnisse unter der ZSH

Heute habe ich mir überlegt, wie ich meine Abläufe weiter optimieren kann. Der Wechsel in oft genutzte Verzeichnisse ist solch ein Ablauf. Als Erstes habe ich mir das Jump-Plugin von Oh My ZSH angesehen.

Da mir Oh My ZSH zu überladen ist, habe ich mir nur das betreffende Plugin installiert. Hierzu habe ich das Verzeichnis /usr/share/zsh/plugins/zsh-jump erstellt und in diesem mittels wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/plugins/jump/jump.plugin.zsh das Plugin heruntergeladen. Abschließend habe ich noch in der ~/.zshrc source /usr/share/zsh/plugins/zsh-jump/jump.plugin.zsh hinzugefügt.

Das Plugin ist nun aktiv. Nun wechselt man einfach in eines der oft genutzten Verzeichnisse. Nehmen wir als Beispiel mal /etc/systemd/system. Mittels mark systemd legen wir ein Lesezeichen an (anstelle von systemd kann man eine beliebige Bezeichnung angeben). Hiermit mit standardmäßig unter ~/.marks ein entsprechender Symlink angelegt.

Nehmen wir nun einmal an, dass wir uns in ~/.config/terminator befinden und nun schnell in /etc/systemd/system wechseln möchten. Also führen wir jump systemd aus und landen umgehend in /etc/systemd/system.

Diese Lösung ist relativ einfach gehalten und erfordert das manuelle Anlegen von Lesezeichen. Andere Lösungen, die ich voraussichtlich noch testen werde, nutzen zum Beispiel fzf und sind daher komplexer und bietet mehr Möglichkeiten.

Linux | OSBN