Freqüentemente, trabalharei na raiz de um diretório Rails, onde me encontrarei navegando no mesmo caminho duas vezes toda vez que gostaria de mover um arquivo:
mv app/views/layouts/application.html.erb app/views/layouts/application.html.haml
O haml é apenas um dos exemplos em que preciso alterar o nome do arquivo sem modificar o diretório em que ele reside atualmente e sem alterar o diretório. Existe uma maneira de conseguir isso?
Responder1
Usarexpansão de cinta:
mv very/long/path/to/filename.{old,new}
se expandiria para
mv very/long/path/to/filename.old very/long/path/to/filename.new
Responder2
Se você for trabalhar em um diretório, poderá mudar para ele temporariamente.
pushd app/views/layouts
mv application.html.erb application.html.haml
popd
No Linux, você pode usar orename
utilitário (chamado rename.ul
no Debian, Ubuntu e derivados) para alterar uma parte do nome do arquivo (que pode estar na parte do diretório). rename foo bar path/to/file
altera a primeira ocorrência de foo
in path/to/file
para bar
. Se um nome de arquivo não contiver a primeira string, o arquivo permanecerá no lugar.
rename .erb .haml app/views/layouts/application.html.erb
rename .erb .haml app/views/layouts/*.html.erb # do several in one go
rename .erb .haml app/views/layouts/application.* # never mind if application.js and application.html.gz also exist
Quando você tem várias palavras consecutivas em uma linha de comando que compartilham um radical comum, você pode usar a expansão de colchetes:
mv app/views/layouts/application.html.{erb,haml}
Responder3
Você poderia cd
no diretório em um sub-shell:
(cd app/views/layouts && mv application.html.erb application.html.haml)
Aqui, os parênteses executam os comandos em um novo bash
processo shell.
Responder4
Você pode definir a função:
mv-rename () {
mv -- "${1}" "$(dirname -- "${1}")/${2}"
}
Uso:
mv-rename app/views/layouts/application.html.erb application.html.haml