In das übergeordnete Verzeichnis einer Datei mit CD wechseln?

9

Ich schreibe eine .sh, um etwas Arbeit für mich zu erledigen, aber jetzt bin ich an dem Punkt angelangt, an dem ich in das Verzeichnis cd muss, in dem sich die Datei /path/to/file.end befindet. Das Terminal erlaubt dies nicht

cd /path/to/file.end
bash: cd: /path/to/file.end: Not a directory

Es gibt leider keine Problemumgehung, die ich kenne. Es wäre also schön, wenn Sie helfen könnten!

Azsgy
quelle
4
Ähm, meinst du cd /path/to? Dadurch wird das Verzeichnis in das Verzeichnis geändert, in dem sich die Datei file.endbefindet.
Alaa Ali
1
Nein, die Datei ist variabel, und ich möchte den Pfad der Datei eingeben (in das Terminal
ablegen

Antworten:

10

Typ cd $( dirname /path/to/file.end). Das wird dich dazu bringen /path/to.

Erläuterung:

  • dirnameGibt den vollständigen Pfad für eine Datei zurück (ohne den Dateinamen, den Sie erhalten würden basename) - dh gibt dirname /etc/apt/apt.conf.d/99update-notifierzurück/etc/apt/apt.conf.d
  • Der Ausdruck $(anything)wird durch das Ergebnis des Befehls in Klammern ersetzt. So cd $( dirname /etc/apt/apt.conf.d/99update-notifier)wird ausgeführt alscd /etc/apt/apt.conf.d

Eine andere (aber alte und entmutigte) Notation dafür war

cd `dirname /path/to/file.end` 
guntbert
quelle
8

Sie können nicht cdin eine Datei. Hier ist eine (Befehlszeilen-) Funktion , die automatisch cdin einen Pfad für einen bestimmten vollständig qualifizierten Dateipfad eingeht:

function fcd () { [ -f "$1" ] && { cd "$(dirname "$1")"; } || { cd "$1"; } ; pwd; }
Rinzwind
quelle
Habe ich das richtig verstanden?: Function fcd () {[-f $ 1] && {cd $ (/ file.end $ 1); } || {cd $ 1; } pwd} die Antwort lautet: bash: Syntaxfehler in der Nähe des unerwarteten Tokens `pwd 'gibt mir auf diese Weise einen Fehler :(
Azsgy
2
@Atsch, brauche vorher ein Semikolon pwdund wenn du eine Funktion in einer Zeile definierst, brauche danach ein Semikolon pwd.
Glenn Jackman
@glennjackman die Funktion wird nur ohne Ausgabe oder Änderung des
Verzeichnisses beendet
Führen Sie die Funktion aus und geben Sie ein echo $?- wie lautet der Exit-Status?
Glenn Jackman
Verdammt, ich hätte nicht an mir zweifeln sollen. Die Alternative sah für mich besser aus, als ich sie fand _O-
Rinzwind
1

Wenn Sie "/ .." an den Dateinamen anhängen, gelangen Sie in das richtige Verzeichnis, z cd /path/to/file.end/... Es funktioniert sowieso auf Cygwin.

Gehirn
quelle
4
Funktioniert nicht in Bash;) touch test && cd /home/test/test/..sagtbash: cd: /home/test/test/..: No such file or directory
Rinzwind