Bash Verzeichnisnavigation
Manchmal ist es nicht ganz einfach, sich auf der Linux-Konsole in einer größeren Verzeichnisstruktur zu bewegen. Doch es gibt eine Hand voll Tricks, um sich das Leben zu erleichtern. Man spart sich viele Tippfehler und die “."-Taste nutzt sich auch weniger ab.
Ersetzen von Pfadteilen
Bewegt man sich in einer Verzeichnisstruktur mit vielen gleichartigen Verzeichnissen (z.B. einem Server mit Installationsimages), so möchte man oft einen Teil des Pfades durch einen anderen ersetzen. Sehen wir uns als Beispiel einmal diese Verzeichnisstruktur an:
- var
\\- install
|- ServerA
| |- etc
| \\- bin
\\- ServerB
|- etc
\\- bin
Befindet man sich nun im Verzeichnis /var/install/ServerA/etc
und möchte in das gleiche Verzeichnis im Baum des Servers B wechseln, so wäre der normale Weg cd ../../ServerB/etc
. Ist die Struktur noch etwas tiefer geschachtelt, so artet das Ganze schnell in eine “.."-Orgie aus. Die Bash-Shell stellt einem jedoch eine Möglichkeit bereit, Teile des aktuellen Pfades zu ersetzen. Nutzt man diese Methode, so sieht der Wechsel von Server A zu Server B folgendermaßen aus: cd ${PWD/ServerA/ServerB/}
. Im Prinzip nutzt diese Methode nur die Stringersetzungsfunktionen der Bash aus. Der Befehl liest sich also folgendermaßen: Nimm die Umgebungsvariable PWD
(welche in der Bash das aktuelle Verzeichnis enthält) und ersetze alle Vorkommen von ServerA
durch ServerB
. So lassen sich schnell Teile des aktuellen Pfades durch andere ersetzen.
Generisch geschrieben lautet der Befehl also:
cd ${PWD/<Zu ersetzender Pfadteil>/<Neuer Pfadteil>/}
Abschneiden des Pfades
Nehmen wir nun an, wir wollen aus dem Pfad /usr/local/bin/PLUGINS/lib
in den Pfad /usr/local
wechseln. Natürlich könnte man cd ../../..
eingeben. Jedoch gibt es - unter Nutzung der Bash-Methoden zur Stringmanipulation - auch noch einen einfacheren Weg: cd ${PWD%/bin*}
. Diese Zeile nutzt die String-Operation %
. Sie löscht alle Zeichen, welche mit dem Ausdruck nach dem %
-Zeichen übereinstimmen. D.h. aus dem aktuellen Pfad werden alle Elemente nach /bin
, einschließlich /bin
gelöscht. Aus diesem Grund muss nach dem Pfadteil auch ein *
angegeben werden.
Um also in einen höheren Pfad zu wechseln, muss man einfach den Namen des Verzeichnisses eingeben, welches nicht mehr zum neuen Pfad gehören soll. Auch dieser Befehl lässt sich generisch formulieren:
cd ${PWD%/<Erstes zu löschendes Element>*}
Pfadsuche mit CDPATH
Die Umgebungsvariable PATH
kennt wahrscheinlich jeder, der sich mit Linux beschäftigt. Nicht so bekannt ist die Variable CDPATH
. Diese funktioniert wie die PATH
-Variable, jedoch wird sie nicht beim Ausführen eines Programmes durchsucht, sondern beim Wechseln des Verzeichnisses mit cd
. Um das erste Beispiel nochmals zu strapazieren: Setzt man über export CDPATH=/local/install
die CDPATH-Variable auf das Verzeichnis /local/install
, so kann man über cd ServerA in das Verzeichnis /local/install/ServerA
wechseln. Wird beim Ausführen von cd
im aktuellen Verzeichnis kein Unterverzeichnis mit dem Namen ServerA
gefunden, so wird für alle in CDPATH
angegebenen Verzeichnisnamen geprüft, ob ein passendes Unterverzeichnis vorhanden ist. Wird eines gefunden, so wird in dieses gewechselt. So kann also von überall aus in ein Unterverzeichnis von /local/install
gewechselt werden.
Ich würde nicht empfehlen CDPATH
automatisch zu setzen. Das wäre, wenn man es nach einiger Zeit vergisst, doch sehr verwirrend. Jedoch kann es in einigen Situationen einen Menge Tipparbeit sparen.
Weitere Informationen
Weitere Informationen über die hervorragenden Stringmanipulationsfunktionen der Bash finden sich hier.