Wenn in Bash, wenn VAR="/home/me/mydir/file.c"
, wie komme ich "/home/me/mydir"
?
400
dirname
und basename
sind die Tools, nach denen Sie suchen, um Pfadkomponenten zu extrahieren:
$ VAR=/home/me/mydir/file.c
$ DIR=$(dirname "${VAR}")
$ echo "${DIR}"
/home/me/mydir
$ basename "${VAR}"
file.c
Sie sind nicht interne Bash Befehle , aber sie sind Teil des POSIX - Standard (siehe dirname
, basename
) und sollte so auf die überwiegende Mehrheit der Systeme zur Verfügung , die Bash laufen wird.
Um die Abhängigkeit von
basename
und zu vermeidendirname
quelle
Wenn Sie nur den Dateinamen oder den relativen Pfad haben,
dirname
hilft dies nicht. Für mich war die Antwort letztendlichreadlink
.Sie können dann beide kombinieren, um nur das Verzeichnis zu erhalten.
quelle
readlink -m "$fname"
angegebenen Namen rekursivWenn Sie möchten, dass Zieldateien ein symbolischer Link sind, können Sie dies zunächst überprüfen und die Originaldatei abrufen. Die folgende if-Klausel kann Ihnen helfen.
quelle
Ich habe damit gespielt und mir eine Alternative ausgedacht.
Der Teil, den ich mochte, war, dass es einfach war, die Sicherung des Baums zu erweitern:
quelle
Hier ist ein Skript, das ich zum rekursiven Trimmen verwendet habe. Ersetzen Sie $ 1 natürlich durch das gewünschte Verzeichnis.
quelle
Zuerst habe ich durch
/
Leerzeichen () ersetzt. Dann habe ich alle Zeichen vor einem leeren Leerzeichen gelöscht (
). Am Ende habe ich das erste Zeichen entfernt, das Leerzeichen ist (
).
quelle
wo Sie den vollständigen Pfad mit new_path = erhalten
$(dirname ${BASH_SOURCE[0]})
. Sie ändern das aktuelle Verzeichnis mitcd
new_path und führen es auspwd
, um den vollständigen Pfad zum aktuellen Verzeichnis abzurufen .quelle