Otro enfoque es crear su propio comando dedicado para este propósito. Esto se puede hacer a través de una función que podría verse así:
$ function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
Donde: (1) mv-special
es el nombre de la función; (2) las variables $1
y $2
son argumentos en la función que serán utilizados por los comandos mv
y cd
; (3) $(echo $2-)
agrega un carácter salvaje al final de la cadena en var $2
, y corrige el comportamiento de dirname
si la variable $2
contiene solo la ruta; (4) $(dirname $(echo $2-))
filtrará solo la ruta desde $2
.
Según esta respuesta, la función podría verse así:
$ function mv-special { mv $1 $2; cd ${2%/*}; }
Donde: ${2%/*}
filtrará solo la ruta desde $2
.
Para estar disponible como comando, esta función debe exportarse :
$ export -f mv-special
Uso:
$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf
o:
$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/
Por favor, preste atención a eso, para ambas variantes, el segundo argumento ( $2
) debe terminar con nombre de archivo o barra inclinada ( /
).
Para que nuestro nuevo comando esté permanentemente disponible, la definición de la función y el comando de exportación deben adjuntarse a ~/.bashrc
:
# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
export -f mv-special
o:
# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd ${2%/*}; }
export -f mv-special
Se puede realizar un comando personalizado y mediante un archivo de script ejecutable que se coloca ~/bin
en /usr/sbin
: ¿Cómo puedo crear un comando de terminal personalizado (para ejecutar un script)? Pero para ser honesto, me enfrenté a un problema con el comportamiento de cd
este escenario.