¿Ir al directorio padre de un archivo con cd?

9

Estoy escribiendo un .sh para hacer un trabajo por mí, pero ahora estoy en el punto donde tengo que cd al directorio donde está el archivo /path/to/file.end. Terminal no permite

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

lamentablemente no conozco ninguna solución alternativa, por lo que sería bueno que pudieras ayudar.

Azsgy
fuente
44
Um, quieres decir cd /path/to? Eso cambiará el directorio al directorio en el que se encuentra el archivo file.end.
Alaa Ali
1
No, el archivo es variable, y me gustaría ingresar la ruta del archivo (soltarlo en la terminal) y luego ir a la carpeta en la que está
Azsgy

Respuestas:

10

Tipo cd $( dirname /path/to/file.end). Eso le llevará a /path/to.

Explicación:

  • dirnamedevuelve la ruta completa de un archivo (sin el nombre de archivo, con el que obtendría basename), es decir, dirname /etc/apt/apt.conf.d/99update-notifierdevuelve/etc/apt/apt.conf.d
  • la expresión $(anything)se reemplaza por el resultado del comando entre paréntesis. Entonces cd $( dirname /etc/apt/apt.conf.d/99update-notifier)se ejecuta comocd /etc/apt/apt.conf.d

Otra notación (pero antigua y desanimada) para el mismo era

cd `dirname /path/to/file.end` 
Guntbert
fuente
8

No puedes cdingresar a un archivo. Aquí está una (línea de comandos) la función que automáticamente cden una ruta para una ruta de archivo plenamente cualificado proporcionado:

function fcd () { [ -f "$1" ] && { cd "$(dirname "$1")"; } || { cd "$1"; } ; pwd; }
Rinzwind
fuente
¿Lo entendí bien ?: function fcd () {[-f $ 1] && {cd $ (/ file.end $ 1); } || {cd $ 1; } pwd} la respuesta es: bash: error de sintaxis cerca del token inesperado 'pwd' me da un error de esta manera :(
Azsgy
2
@Atsch, necesita un punto y coma antes pwd, y si está definiendo una función en una línea, necesita un punto y coma después pwd.
Glenn Jackman
@glennjackman la función simplemente sale sin ningún resultado o cambio de directorio :(
Azsgy
ejecute la función, luego ingrese echo $?: ¿cuál es el estado de salida?
Glenn Jackman
maldita sea, no debería haber dudado de mí mismo. La alternativa me pareció mejor cuando la encontré _O-
Rinzwind 05 de
1

Si agrega "/ .." al nombre de archivo que lo llevará al directorio correcto, por ejemplo cd /path/to/file.end/... Funciona en Cygwin de todos modos.

cerebro
fuente
44
No funciona en bash;) touch test && cd /home/test/test/..dicebash: cd: /home/test/test/..: No such file or directory
Rinzwind