Answers:
为了最大程度地减少键入量,可能最容易分两步进行。CD到目录,然后移动。
如果只有一个命令,则可以使用子shell:
$ (cd blob/a_long_directory_name/c/ && mv x.x y.y )
这意味着cd
将仅在子外壳中生效,mv
仅在cd
成功之后才会发生,并且当前外壳的工作目录不会更改。
如果您有多个命令,请使用目录堆栈。
$ pushd blob/a_long_directory_name/c/
$ mv x.x y.y
$ mv z.z q.q
$ popd
您可以使用外壳程序的文本替换功能。在中bash
,您可以使用像这样的野兽:
mv blob/a_long_directory_name/c/xx !#:$:gs^c/xx^evenmore/yy
分解:
!#
到目前为止输入的当前行是
:$
要求选择n
要n
考虑的字符串的最后一个单词(用数字代替,选择第一个单词)(!#
在这种情况下)。到目前为止键入的行的最后一个单词将是前一个单词。
:gs^xx^yy
在结果字词上进行全局(g
)文本替换(s
),将“ xx”替换为“ yy”。^
只是s
命令的分隔符,以允许/
您在模式中使用该命令。
此方法稍微通用一点,因为它使您可以用其他任何单词('yy')替换路径('xx')的任何部分。
最后,像任何历史操作一样,最好设置适当的shell选项(例如in中~/.bashrc
)。在这种情况下
shopt -s histverify
在按回车键后将显示已编辑的行,因此您仍然可以对其进行编辑并检查错误。
我不确定为什么要使用这样的构造,但是在这种情况下它是可行的。
c/x.x
通过evenmore/y.y
保留原始路径前缀来代替它。
$PWD
)。当然,这也许不是最优雅的方法,但它指出了这样一个事实:shell确实具有文本替换和单词指示符,某些用户可能仍认为这些替换符对研究有用。
even_more
相对路径...