Maneira rápida de incluir um caminho de diretório ao chamar mv?

Maneira rápida de incluir um caminho de diretório ao chamar mv?

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 orenameutilitário (chamado rename.ulno 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/filealtera a primeira ocorrência de fooin path/to/filepara 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 cdno 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 bashprocesso 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

informação relacionada