¿Cómo hacer un cd en el directorio O en el que se encuentra el archivo de directorio?

¿Cómo hacer un cd en el directorio O en el que se encuentra el archivo de directorio?

Si lo hago cd "user/Dropbox/foo.txt", lo obtengo -bash: cd: user/Dropbox/foo.txt: Not a directory. Pero mi intención en este caso es siempre la misma: quiero cdir al directorio en el que se encuentra el archivo.

Probé esto:

function smartcd
{
    dirname=$(dirname "$1");
    cd $dirname;
}

Pero no funciona porque cuando $1 es un directorio, dirname "$1"devuelve el directorio principal, no el directorio en sí.

¿Cómo puedo crear un comando que vaya al directorio mismo si $1es un directorio, o al directorio en el que se encuentra el archivo si $1es un archivo?

Respuesta1

Creo que lo que quieres es probar primero $1 para un archivo:

si prueba -f "$1"; luego cd dirname ... else cd "$1" fi

información relacionada