调用 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将第一次出现的fooin更改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在子 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

相关内容