有没有办法在mv不输入第二个参数的完整路径的情况下执行命令?
例子:
mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz
gei*_*rha 38
您可以使用 bash 的大括号扩展。这个:
mv my/file/that/has/a/really/long/path/foo.{bar,baz}
Run Code Online (Sandbox Code Playgroud)
将扩展为:
mv my/file/that/has/a/really/long/path/foo.bar my/file/that/has/a/really/long/path/foo.baz
Run Code Online (Sandbox Code Playgroud)
然后mv使用这两个参数运行。有关大括号扩展的更多信息,请参阅http://wiki.bash-hackers.org/syntax/expansion/brace。
作为大括号扩展的替代方法,您可以使用 bash shell 的历史扩展功能:
! 引入历史扩展# 表示当前命令的事件指示符$ 指代最后一个参数的单词指示符 您可以使用类似 sed 的s/pattern/replacement语法对扩展执行替换,例如
somecommand path/to/foo.bar !#$:s/.bar/.baz
Run Code Online (Sandbox Code Playgroud)
前任。
$ 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'
Run Code Online (Sandbox Code Playgroud)
如果您想要特定的路径(例如,指向mv一个完全不同的名称且不容易通过替换获得的文件),您可以使用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'
Run Code Online (Sandbox Code Playgroud)
对于其他选项,包括readline用于提取最后一个参数的组合键,请参阅如何在 bash 控制台上重复当前输入的参数?
`DIR=./really/long/path/mv "$DIR"foo.bar "$DIR"foo.bz一行:DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz
cd转到您想要工作的目录:cd ./really/long/pathmv foo.bar foo.bz一行:cd ./really/long/path && mv foo.bar foo.bz
sha*_*anu -3
您可以使用别名命令来缩短目录名称:
alias src='/directory/name/of/source'
alias dst='/directory/name/of/destination'
mv src dst
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10155 次 |
| 最近记录: |