¿Hay alguna forma de ejecutar un mvcomando 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

cdir al directorio ymvdesde allí?Respuestas:
Puedes usar la expansión de llaves de bash. Esta:
se expandirá a:
y luego
mvse 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/replacementsintaxis de tipo sed, por ejemploEx.
Si desea la ruta específicamente (por ejemplo, a
mvun archivo con un nombre completamente diferente que no se obtiene fácilmente por sustitución), puede usar elhmodificador:Para otras opciones, incluidas
readlinelas 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.bzEn una línea:
DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bzCambio de directorio
cdir al directorio en el que desea trabajar:cd ./really/long/pathmv foo.bar foo.bzEn una línea:
cd ./really/long/path && mv foo.bar foo.bzfuente
&&en esa última línea. De lo contrario, sicdfalla,mvse ejecutará en el directorio incorrecto, posiblemente sobrescribiendo un archivo. Concd ./really/long/path && mv foo.bar foo.baz,mvsolo se ejecutará sicdlogra cambiar el directorio.Puede alias comando para acortar el nombre del directorio:
fuente
alias test='/var/log' ; cd testda-bash: cd: test: No such file or directory.