Ocasionalmente, he editado algún archivo y quiero moverlo a una carpeta diferente. (Típicamente: a una carpeta de Dropbox, donde no quería trabajar para evitar darles a los otros propietarios de la carpeta actualizaciones constantes). Lo hago, por ejemplo, con
mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf
Después, a menudo me encuentro con ganas de cambiar el directorio al directorio de destino de mi operación de movimiento anterior. Me encuentro presionando la flecha hacia arriba, borrando la final file.pdf, sosteniendo a la izquierda, borrando mv file.pdfy reemplazando con cd.
¿Hay una manera más rápida e inteligente de hacer esto? ¿Hay un comando "mover archivo y luego cambiar directorio a", o un acceso directo para el último directorio utilizado, o algo así?
command-line
mv
Mees de Vries
fuente
fuente

Respuestas:
Si está usando bash, entonces su interacción con el historial tiene solo el atajo para esto. La palabra designadora para el último argumento del comando anterior:
Combinado con un modificador para eliminar el último componente de nombre de ruta:
Después del designador de palabras opcional, puede agregar una secuencia de uno o más de los modificadores válidos , cada uno precedido por un ':'.
Entonces:
El mismo acceso directo también se puede usar con zsh.
fuente
Si no está cambiando el nombre del archivo, puede omitirlo y mv lo agregará automáticamente; Esto es especialmente útil al mover varios archivos:
Con el directorio como último argumento, puede usar
!!:$o!$como describe la respuesta de muru.Si usa bash con los valores predeterminados habituales, puede usar Alt+ en su .lugar.
(Este es el
insert-last-argumentcomando readline ;bind -penumerará todos sus enlaces actuales).fuente
mvsiempre sobrescribe los archivos de destino en silencio a menos que especifique las opciones-i/--interactiveo-n/--no-clobber. Es por eso que tengoalias mv='mv -i' cp='cp -i'en mi.bashrc.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í:
Donde: (1)
mv-speciales el nombre de la función; (2) las variables$1y$2son argumentos en la función que serán utilizados por los comandosmvycd; (3)$(echo $2-)agrega un carácter salvaje al final de la cadena en var$2, y corrige el comportamiento dedirnamesi la variable$2contiene solo la ruta; (4)$(dirname $(echo $2-))filtrará solo la ruta desde$2.Según esta respuesta, la función podría verse así:
Donde:
${2%/*}filtrará solo la ruta desde$2.Para estar disponible como comando, esta función debe exportarse :
Uso:
o:
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:o:
Se puede realizar un comando personalizado y mediante un archivo de script ejecutable que se coloca
~/binen/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 decdeste escenario.fuente