¿Hay alguna forma de ejecutar un mv
comando sin escribir la ruta completa en el segundo argumento?
Ejemplo:
mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz
command-line
Finbarr
fuente
fuente
cd
ir al directorio ymv
desde allí?Respuestas:
Puedes usar la expansión de llaves de bash. Esta:
se expandirá a:
y luego
mv
se ejecuta con esos dos argumentos. Consulte http://wiki.bash-hackers.org/syntax/expansion/brace para obtener más información sobre la expansión de llaves.fuente
Como alternativa a la expansión de llaves, puede usar las características de expansión del historial de bash shell :
!
introduce una expansión de la historia#
designador de eventos que denota el comando actual$
designador de palabras que se refiere al último argumentoPuede realizar sustituciones en la expansión utilizando una
s/pattern/replacement
sintaxis de tipo sed, por ejemploEx.
Si desea la ruta específicamente (por ejemplo, a
mv
un archivo con un nombre completamente diferente que no se obtiene fácilmente por sustitución), puede usar elh
modificador:Para otras opciones, incluidas
readline
las combinaciones de teclas para tirar del último argumento, vea ¿Cómo repetir el parámetro actualmente escrito en la consola bash?fuente
Puedes probar:
fuente
Con una variable
`DIR=./really/long/path/
mv "$DIR"foo.bar "$DIR"foo.bz
En una línea:
DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz
Cambio de directorio
cd
ir al directorio en el que desea trabajar:cd ./really/long/path
mv foo.bar foo.bz
En una línea:
cd ./really/long/path && mv foo.bar foo.bz
fuente
&&
en esa última línea. De lo contrario, sicd
falla,mv
se ejecutará en el directorio incorrecto, posiblemente sobrescribiendo un archivo. Concd ./really/long/path && mv foo.bar foo.baz
,mv
solo se ejecutará sicd
logra cambiar el directorio.Puede alias comando para acortar el nombre del directorio:
fuente
alias test='/var/log' ; cd test
da-bash: cd: test: No such file or directory
.