Souvent, je vais travailler à partir de la racine d'un directory de rails où je me retrouve dans le même path deux fois à chaque fois que je voudrais déplacer un file:
mv app/views/layouts/application.html.erb app/views/layouts/application.html.haml
Le haml est juste l'un des exemples de mai où je dois changer le nom de file sans modifier le directory dans lequel il vit actuellement et sans changer de directory. Y a-t-il un moyen d'y parvenir?
Utilisez l' expansion de l'accolade :
mv very/long/path/to/filename.{old,new}
élargirait à
mv very/long/path/to/filename.old very/long/path/to/filename.new
Si vous travaillez dans un directory, vous pouvez y accéder temporairement.
pushd app/views/layouts mv application.html.erb application.html.haml popd
Sous Linux, vous pouvez utiliser l'utilitaire rename
(appelé rename.ul
sous Debian, Ubuntu et dérivés) pour modifier une partie du nom de file (qui peut se find dans la partie directory). rename foo bar path/to/file
change la première occurrence de foo
dans le path/to/file
to bar
. Si un nom de file ne contient pas la première string, le file est laissé en place.
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
Lorsque vous avez plusieurs mots consécutifs dans une ligne comman partageant une même racine, vous pouvez utiliser l'expansion d'accolade:
mv app/views/layouts/application.html.{erb,haml}
Vous pourriez cd
dans le directory dans un sous-shell:
(cd app/views/layouts && mv application.html.erb application.html.haml)
Ici, les parenthèses exécutent les commands dans un nouveau process shell bash
.
Vous pouvez définir la fonction:
mv-rename () { mv -- "${1}" "$(dirname -- "${1}")/${2}" }
Usage:
mv-rename app/views/layouts/application.html.erb application.html.haml