Existe alguma maneira de executar um mv
comando sem digitar o caminho completo no segundo argumento?
Exemplo:
mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz
command-line
Finbarr
fonte
fonte
cd
para o diretório emv
de lá?Respostas:
Você pode usar a expansão de chaves do bash. Este:
expandirá para:
e depois
mv
é executado com esses dois argumentos. Consulte http://wiki.bash-hackers.org/syntax/expansion/brace para obter mais informações sobre expansão de chaves.fonte
Como uma alternativa para preparar a expansão, você pode usar os recursos de expansão do histórico do bash shell :
!
introduz uma expansão da história#
designador de evento que denota o comando atual$
designador de palavras referente ao último argumentoVocê pode executar substituições na expansão usando uma
s/pattern/replacement
sintaxe semelhante a sed, por exemploEx.
Se você desejar o caminho especificamente (por exemplo, para
mv
um arquivo com um nome completamente diferente que não seja facilmente obtido por substituição), poderá usar oh
modificador:Para outras opções, incluindo
readline
combinações de teclas para puxar o último argumento, consulte Como repetir o parâmetro digitado no momento no console bash?fonte
Você pode tentar:
fonte
Com uma variável
`DIR=./really/long/path/
mv "$DIR"foo.bar "$DIR"foo.bz
Em uma linha:
DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz
Alterando diretório
cd
o diretório em que deseja trabalhar:cd ./really/long/path
mv foo.bar foo.bz
Em uma linha:
cd ./really/long/path && mv foo.bar foo.bz
fonte
&&
nessa última linha. Caso contrário, secd
falhar, omv
arquivo será executado no diretório errado, potencialmente substituindo um arquivo. Comcd ./really/long/path && mv foo.bar foo.baz
,mv
só será executado secd
conseguir alterar o diretório.Você pode usar o comando alias para abreviar o nome do diretório:
fonte
alias test='/var/log' ; cd test
dá-bash: cd: test: No such file or directory
.