Com a expansão de chaves:
mv foo/bar/blee/{blaz,foobar}.txt
Muitas vezes preciso fazer uma pequena alteração em um arquivo aninhado em vários diretórios abaixo do meu diretório de trabalho atual. Como é apenas um arquivo, e globbing / scripting seria um exagero, eu faço a alteração manualmente.
Por exemplo, preciso renomear o arquivo blaz.txt
in ./foo/bar/blee para foobar.txt
:
.
|--foo
|--bar
| blee
|-- blaz.txt
Normalmente, faço isso por cd
'% to blee
e executando mv blaz.txt foobar.txt
para arquivos únicos. Eu sei que eu poderia digitar os caminhos completos (descansando em algumas conclusões de guias úteis para acelerar as coisas), mas eu preferiria algo mais rápido.
Existe uma maneira melhor de fazer isso?
> touch tmp/foo/bar/baz
> rename baz boo tmp/foo/bar/baz
> ls -l tmp/foo/bar/
total 0
-rw-r--r-- 1 hl hauke 0 May 29 23:08 boo
Você pode usar um subshell.
( cd foo/bar/blee ; mv blaz.txt boo.txt )
Mas eu tive que marcar com +1 o exemplo das chaves. Isso é excelente.
Você pode salvar o caminho foo=/tmp/foo/bar
em seu ambiente e usá-lo como atalho.
mv $foo/blaz.txt $foo/foobar.txt
ou
mv $foo/{blaz,foobar}.txt
Se ele não ficar muito confuso, você poderá criar um link simbólico e passar os comandos para ele mesmo.
Um guia para criar links simbólicos: link
Atualize do comentário abaixo:
ln -s /directory/thats/super/long/and/a/pita/ /etc/goats/
e, em seguida, mv /etc/goats/foo.txt /etc/goats/bar.txt
Vale a pena tentar.
Tags bash