.png)
A menudo quiero cambiar al directorio de un archivo en mi sistema de archivos, pero no estoy seguro de dónde está el archivo.
Lo busco así:
find -type f -name "myfile.txt"
Digamos, en aras de la simplicidad, que esto devuelve un resultado, por ejemplo.
/alguna/súper/larga/ruta/esa/no/quiero/escribir/miarchivo.txt
Entonces normalmente escribo esto:
cd $(dirname $(!!))
Para cambiar al directorio del archivo que estaba buscando...
¿Hay alguna forma de poner esto en un script de shell o alias, así que básicamente puedo escribir:
cdlast
y se ejecuta:
cd $(dirname $(!!))
usando la HISTORIA del shell? Lo probé y parece que falta el historial del shell en los scripts de bash.
Respuesta1
fc -s
ejecuta el comando anterior nuevamente:
alias cdlast='cd "$(dirname "$(fc -s 2> /dev/null)")"'
O usar eval "$(history -p !!)"
:
alias cdlast='cd "$(dirname "$(eval "$(history -p !!)")")"'
Respuesta2
Puedes usar un alias.
alias cdlast='cd "$(dirname "$(eval $(history -p !!))")"'
Asegúrese de tener las comillas dobles allí. Esto evita que los resultados de las sustituciones de comandos se divida en palabras separadas si tienen espacios y se interpreten como patrones comodín si tienen caracteres especiales como *
y ?
.
Respuesta3
Yo usaría una función:
gotofile () { pushd "$(find . -name "$1" -printf "%h\n")"; }
Cambiar "." a algún directorio según corresponda ("~" quizás)