【问题标题】:Is there any shortcut to reference the path of the first argument in a MV command?是否有任何快捷方式来引用 MV 命令中第一个参数的路径?
【发布时间】:2011-07-27 05:22:06
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你用什么外壳? bash?

标签: linux bash mv


【解决方案1】:

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

然后按“↑”编辑命令

【讨论】:

    【解决方案2】:

    另一种方式:brace expansion

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

    一般来说,

    before{FIRST,SECOND}after
    

    扩展到

    beforeFIRSTafter beforeSECONDafter
    

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

    mv somefile{,.bak}
    

    扩展到

    mv somefile somefile.bak
    

    它适用于bashzsh

    更多示例:

    【讨论】:

      【解决方案3】:

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

      例如,

      mv app/models/keywords_builder.rb <Ctrl+W><Ctrl+Y><Ctrl+Y><edit as needed>
      

      【讨论】:

      • 真的喜欢这个主意。我只是找不到一种简单的方法来使用默认的 bash 绑定“向后移动”到空间。 Alt+B 四次?
      • Ctrl+a, Alt+f?或Ctrl+rSpace。或者在set -o viEscTSpace
      • 噢! Ctrl+W 在这里会很棒。
      • ... 然后Alt+BackspaceAlt+BackspaceAlt+Backspace 删除目标中的文件名部分。
      • @geekosaur:你想这样写吗?它很大程度上基于您的,所以请随意这样做。
      【解决方案4】:

      cd apps/models &amp;&amp; mv keywords_builder.rb keywords_generator.rb &amp;&amp; cd -

      【讨论】:

      • 而不是 cd 在开始和结束时我会推荐 pushd /popd
      • 多敲几下就能达到完全相同的效果。
      • 不同之处在于 cd - 只工作一个级别 - 如果你 cd`ed 进入你的目录并有意留下 - 你的 OLDDIR 会丢失
      【解决方案5】:

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

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

      bashzsh 支持。

      文档:

      【讨论】:

      • 我不知道是投票给你还是把你烧死。
      • @Ben Jackson:大多数csh 功能都会激发这种情绪。 :-)
      • 说我是否想获取目录的一部分(例如,除了最后一个文件夹之外的所有内容)?是否有允许我这样做的变体?
      • 您可以多次使用:h,例如!#^:h:h.
      • 一个好主意,但实际上最好使用!#$:h 语法来引用最后一个参数,因为第一个参数可能是一个选项(例如mv -iv ...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      • 2010-10-30
      • 2012-05-12
      • 2015-10-27
      • 2010-10-11
      相关资源
      最近更新 更多