Ich arbeite häufig im Stammverzeichnis eines Rails-Verzeichnisses und muss jedes Mal, wenn ich eine Datei verschieben möchte, zweimal denselben Pfad navigieren:
mv app/views/layouts/application.html.erb app/views/layouts/application.html.haml
Das Haml ist nur eines von vielen Beispielen, bei denen ich den Dateinamen ändern muss, ohne das Verzeichnis zu ändern, in dem es sich derzeit befindet, und ohne das Verzeichnis zu wechseln. Gibt es eine Möglichkeit, dies zu erreichen?
Antwort1
VerwendenKlammererweiterung:
mv very/long/path/to/filename.{old,new}
würde sich ausdehnen auf
mv very/long/path/to/filename.old very/long/path/to/filename.new
Antwort2
Wenn Sie in einem Verzeichnis arbeiten, können Sie vorübergehend dorthin wechseln.
pushd app/views/layouts
mv application.html.erb application.html.haml
popd
Unter Linux können Sie denrename
Dienstprogramm (wird rename.ul
unter Debian, Ubuntu und Derivaten aufgerufen), um einen Teil des Dateinamens zu ändern (der im Verzeichnisteil enthalten sein kann). rename foo bar path/to/file
ändert das erste Vorkommen von foo
in path/to/file
in bar
. Wenn ein Dateiname die erste Zeichenfolge nicht enthält, bleibt die Datei an ihrem Platz.
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
Wenn Sie in einer Befehlszeile mehrere aufeinanderfolgende Wörter mit einem gemeinsamen Stamm haben, können Sie die Klammererweiterung verwenden:
mv app/views/layouts/application.html.{erb,haml}
Antwort3
Sie könnten cd
im Verzeichnis in einer Unter-Shell Folgendes tun:
(cd app/views/layouts && mv application.html.erb application.html.haml)
Dabei führen die Klammern die Befehle in einem neuen bash
Shell-Prozess aus.
Antwort4
Sie können die Funktion definieren:
mv-rename () {
mv -- "${1}" "$(dirname -- "${1}")/${2}"
}
Verwendung:
mv-rename app/views/layouts/application.html.erb application.html.haml