¿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
¿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
Respuestas:
Puedes usar la expansión de llaves de bash. Esta:
mv my/file/that/has/a/really/long/path/foo.{bar,baz}
se expandirá a:
mv my/file/that/has/a/really/long/path/foo.bar my/file/that/has/a/really/long/path/foo.baz
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.
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 argumento Puede realizar sustituciones en la expansión utilizando una s/pattern/replacementsintaxis de tipo sed, por ejemplo
somecommand path/to/foo.bar !#$:s/.bar/.baz
Ex.
$ mv -v somepath/Original/Dir3/SubDir1/foo.bar !#$:s/.bar/.baz
mv -v somepath/Original/Dir3/SubDir1/foo.bar somepath/Original/Dir3/SubDir1/foo.baz
'somepath/Original/Dir3/SubDir1/foo.bar' -> 'somepath/Original/Dir3/SubDir1/foo.baz'
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 el hmodificador:
$ mv -v somepath/Original/Dir3/SubDir1/foo.baz !#$:h/baz.foo
mv -v somepath/Original/Dir3/SubDir1/foo.baz somepath/Original/Dir3/SubDir1/baz.foo
'somepath/Original/Dir3/SubDir1/foo.baz' -> 'somepath/Original/Dir3/SubDir1/baz.foo'
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?
`DIR=./really/long/path/mv "$DIR"foo.bar "$DIR"foo.bzEn una línea: DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz
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.bz
&&en esa última línea. De lo contrario, si cdfalla, mvse ejecutará en el directorio incorrecto, posiblemente sobrescribiendo un archivo. Con cd ./really/long/path && mv foo.bar foo.baz, mvsolo se ejecutará si cdlogra cambiar el directorio.
cdir al directorio ymvdesde allí?