作为对大括号扩展的替代方案,您可以使用bash shell的历史扩展功能:
!
引入一个历史扩展
#
事件指示符表示当前命令
$
单词指示符指向最后一个参数
您可以使用类似sed的
s/pattern/replacement
语法对扩展进行替换,例如:
somecommand path/to/foo.bar !#$:s/.bar/.baz
例子
$ mv -v somepath/Original/Dir3/SubDir1/foo.bar !#$:s/.bar/.baz
mv -v somepath/Original/Dir3/SubDir1/foo.bar somepath/Original/Dir3/SubDir1/foo.baz
'somepath/Original/Dir3/SubDir1/foo.bar' -> 'somepath/Original/Dir3/SubDir1/foo.baz'
如果你想要获取特定的路径(例如,将文件以完全不易通过替换获得的名称移动),你可以使用
h
修饰符:
$ mv -v somepath/Original/Dir3/SubDir1/foo.baz !#$:h/baz.foo
mv -v somepath/Original/Dir3/SubDir1/foo.baz somepath/Original/Dir3/SubDir1/baz.foo
'somepath/Original/Dir3/SubDir1/foo.baz' -> 'somepath/Original/Dir3/SubDir1/baz.foo'
对于其他选项,包括使用
readline
键组合来复制最后一个参数,请参阅
如何在bash控制台上重复当前输入的参数?。
cd
命令进入目录,然后再从那里使用mv
命令呢? - zpletancd
命令切换到任何路径后,你可以使用cd -
立即返回上一级路径。 - bloody