mv を呼び出すときにディレクトリ パスを含める簡単な方法は?

mv を呼び出すときにディレクトリ パスを含める簡単な方法は?

私はよく Rails ディレクトリのルートから作業しますが、ファイルを移動するたびに同じパスを 2 回ナビゲートすることになります。

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

haml は、現在存在するディレクトリを変更せずに、またディレクトリを変更せずにファイル名を変更する必要がある多くの例の 1 つにすぎません。これを実現する方法はありますか?

答え1

使用ブレース拡張:

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

拡大すると

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

答え2

ディレクトリ内で作業する場合は、一時的に切り替えることができます。

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

Linuxでは、renameユーティリティ ( rename.ulDebian、Ubuntu およびその派生版で呼ばれる) を使用して、ファイル名の一部 (ディレクトリ部分にある場合もあります) を変更します。でrename foo bar path/to/file最初に出現する を に変更しますfoo。ファイル名に最初の文字列が含まれていない場合、ファイルはそのまま残ります。path/to/filebar

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

コマンドラインに共通の語幹を共有する連続した単語が複数ある場合は、中括弧展開を使用できます。

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

答え3

cdサブシェルのディレクトリで次のように実行できます。

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

ここで、括弧は新しいシェル プロセスでコマンドを実行しますbash

答え4

関数を定義できます:

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

使用法:

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

関連情報