呼叫 mv 時包含目錄路徑的快速方法?

呼叫 mv 時包含目錄路徑的快速方法?

通常,我會在 Rails 目錄的根目錄中工作,每次我想移動檔案時,我都會在同一路徑中導航兩次:

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

haml 只是我需要更改檔案名稱而不修改其目前所在目錄且不更改目錄的可能範例之一。有辦法實現這一點嗎?

答案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.ul在 Debian、Ubuntu 及其衍生產品下呼叫)用於更改檔案名稱的一部分(可以位於目錄部分)。rename foo bar path/to/file將第一次出現的fooinpath/to/file改為bar。如果檔案名稱不包含第一個字串,則該檔案將保留在原處。

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在子 shell 中的目錄中:

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

這裡,括號在新的 shell 程序中執行指令bash

答案4

您可以定義函數:

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

用法:

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

相關內容