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

30

Freqüentemente, eu trabalho fora da raiz de um diretório rails, onde eu me vejo navegando pelo mesmo caminho duas vezes toda vez que eu 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 está atualmente e sem alterar o diretório. Existe uma maneira de conseguir isso?

    
por rudolph9 05.04.2012 / 08:59

4 respostas

52

Use expansão de chaves :

mv very/long/path/to/filename.{old,new}

se expande para

mv very/long/path/to/filename.old very/long/path/to/filename.new
    
por 05.04.2012 / 09:40
8

Se você for trabalhar em um diretório, poderá alternar temporariamente para ele.

pushd app/views/layouts
mv application.html.erb application.html.haml
popd

No Linux, você pode usar o utilitário rename (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 em 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 comum que compartilha um radical comum, é possível usar a expansão de chaves:

mv app/views/layouts/application.html.{erb,haml}
    
por 06.04.2012 / 02:02
3

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 processo bash shell.

    
por 10.04.2012 / 14:17
1

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
    
por 10.04.2012 / 15:05

Tags