是否有任何快捷方式可以引用 MV 命令中第一个参数的路径?
我经常发现自己使用 mv 来重命名文件。例如,
mv app/models/keywords_builder.rb app/models/keywords_generator.rb
这样做我需要编写(好的,制表符完成)第二个参数的路径。在此示例中,情况还不错,但有时路径嵌套很深,看起来需要相当多的额外输入。
有没有更有效的方法来做到这一点?
I often find myself using mv to rename a file. E.g.
mv app/models/keywords_builder.rb app/models/keywords_generator.rb
Doing so I need to write (ok, tab complete) the path for the second parameter. In this example it isn't too bad but sometimes the path is deeply nested and it seems like quite a bit of extra typing.
Is there a more efficient way to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
另一种方式:大括号扩展。
一般来说,
扩展为
因此它对于其他重命名也很有用,例如
扩展为
它适用于
bash
和zsh
。更多示例:
And another way: brace expansion.
In general,
expands to
So it's also useful for other renames, e.g.
expands to
It works in
bash
andzsh
.More examples:
您可以像这样使用历史扩展:
!
引入历史扩展。#
指当前正在输入的命令^
表示第一个参数:h
是一个修饰符,用于获取“头”,即没有目录的目录文件部分bash
和zsh
支持。文档:
You can use history expansion like this:
!
introduces history expansion.#
refers to the command currently being typed^
means the first argument:h
is a modifier to get the "head", i.e. the directory without the file partIt's supported in
bash
andzsh
.Docs:
一种方法是输入第一个文件名和一个空格,然后按
Ctrl
+w
将其删除。然后按Ctrl
+y
两次以获取文件名的两个副本。然后编辑第二个副本。例如,
One way is to type the first file name and a space, then press
Ctrl
+w
to delete it. Then pressCtrl
+y
twice to get two copies of the file name. Then edit the second copy.For example,
或 cd apps/models && mv keywords_builder.rb keywords_generator.rb && cd-
or
cd apps/models && mv keywords_builder.rb keywords_generator.rb && cd -
Mikel 和 geekosaur 的综合答案,并附加使用“:p”
使用大括号扩展以避免第一个参数重复:
mv -iv {,old_}readme.txt # 'readme.txt' - > 'old_readme.txt'
mv -iv file{,.backup} # '文件' -> 'file.backup'
使用历史扩展来避免第一个参数重复:
mv -iv "system file" !#$.backup # 'system file' -> 'system file.backup'
可以使用“p”指示符打印文件名以进行进一步编辑:
mv -iv "file with a long name" !#$:p
然后按“↑”编辑命令
Combined answers of Mikel and geekosaur with additonal use of ":p"
use brace expansion to avoid first argument repetition:
mv -iv {,old_}readme.txt # 'readme.txt' -> 'old_readme.txt'
mv -iv file{,.backup} # 'file' -> 'file.backup'
use history expansion to avoid first argument repetition:
mv -iv "system file" !#$.backup # 'system file' -> 'system file.backup'
the filename can be printed using the "p" designator for further edition:
mv -iv "file with a long name" !#$:p
then press "↑" to edit the command