¿Una forma rápida de incluir una ruta de directorio al llamar a mv?

¿Una forma rápida de incluir una ruta de directorio al llamar a mv?

A menudo trabajo desde la raíz de un directorio Rails donde me encuentro navegando por la misma ruta dos veces cada vez que quiero mover un archivo:

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

haml es solo uno de muchos ejemplos en los que necesito cambiar el nombre del archivo sin modificar el directorio en el que se encuentra actualmente y sin cambiar el directorio. ¿Hay una manera de lograr esto?

Respuesta1

Usarexpansión de corsé:

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

se expandiría a

mv very/long/path/to/filename.old very/long/path/to/filename.new

Respuesta2

Si va a trabajar en un directorio, puede cambiar a él temporalmente.

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

En Linux, puede utilizar elrenameutilidad (llamada rename.ulen Debian, Ubuntu y derivados) para cambiar una parte del nombre del archivo (que puede estar en la parte del directorio). rename foo bar path/to/filecambia la primera aparición de fooin path/to/filea bar. Si el nombre de un archivo no contiene la primera cadena, el archivo se deja en su 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

Cuando tienes varias palabras consecutivas en una línea de comando que comparten una raíz común, puedes usar la expansión de llaves:

mv app/views/layouts/application.html.{erb,haml}

Respuesta3

Podrías cden el directorio en un sub-shell:

(cd app/views/layouts && mv application.html.erb application.html.haml)

Aquí, los paréntesis ejecutan los comandos en un nuevo bashproceso de shell.

Respuesta4

Puedes definir la función:

mv-rename () {
  mv -- "${1}" "$(dirname -- "${1}")/${2}"
}

Uso:

mv-rename app/views/layouts/application.html.erb application.html.haml

información relacionada