Schnelle Möglichkeit, beim Aufruf von mv einen Verzeichnispfad einzuschließen?

Schnelle Möglichkeit, beim Aufruf von mv einen Verzeichnispfad einzuschließen?

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 denrenameDienstprogramm (wird rename.ulunter 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 fooin path/to/filein 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 cdim 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 bashShell-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

verwandte Informationen