11

我经常发现自己使用 mv 来重命名文件。例如

mv app/models/keywords_builder.rb app/models/keywords_generator.rb

这样做我需要为第二个参数编写(好的,制表符完成)路径。在这个例子中,它并不算太糟糕,但有时路径嵌套很深,而且似乎需要大量额外的输入。

有没有更有效的方法来做到这一点?

4

5 回答 5

22

另一种方式:大括号扩展

mv app/models/keywords_{builder,generator}.rb

一般来说,

before{FIRST,SECOND}after

扩展到

beforeFIRSTafter beforeSECONDafter

所以它对其他重命名也很有用,例如

mv somefile{,.bak}

扩展到

mv somefile somefile.bak

它适用于bashzsh

更多示例:

于 2011-03-31T21:27:06.800 回答
10

您可以像这样使用历史扩展:

mv app/modules/keywords_builder.rb !#^:h/keywords_generator.rb
  1. !引入历史扩展。
  2. #指当前正在键入的命令
  3. ^表示第一个参数
  4. :h是获取“头”的修饰符,即没有文件部分的目录

它在bash和中受支持zsh

文件:

于 2011-03-31T20:26:53.237 回答
4

一种方法是键入第一个文件名和一个空格,然后按Ctrl+w将其删除。然后按Ctrl+y两次以获得文件名的两个副本。然后编辑第二个副本。

例如,

mv app/models/keywords_builder.rb <Ctrl+W><Ctrl+Y><Ctrl+Y><edit as needed>
于 2011-03-31T20:25:09.587 回答
1

或者cd apps/models && mv keywords_builder.rb keywords_generator.rb && cd -

于 2011-03-31T21:28:55.970 回答
0

Mikel 和 geekosaur 的组合答案以及“:p”的附加使用

使用大括号扩展来避免第一个参数重复:

mv -iv {,old_}readme.txt # 'readme.txt' -> 'old_readme.txt'

mv -iv file{,.backup} # 'file' -> 'file.backup'

使用历史扩展来避免第一个参数重复:

mv -iv "system file" !#$.backup # 'system file' -> 'system file.backup'

可以使用“p”指示符打印文件名以进行进一步的编辑:

mv -iv "file with a long name" !#$:p

然后按“↑”编辑命令

于 2018-01-11T20:07:32.603 回答