通常,我会在 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
将第一次出现的foo
in更改path/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