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.pdf
y 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-argument
comando readline ;bind -p
enumerará todos sus enlaces actuales).fuente
mv
siempre sobrescribe los archivos de destino en silencio a menos que especifique las opciones-i
/--interactive
o-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-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 comandosmv
ycd
; (3)$(echo $2-)
agrega un carácter salvaje al final de la cadena en var$2
, y corrige el comportamiento dedirname
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í:
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
~/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 decd
este escenario.fuente