Answers:
使用bash 历史记录扩展:
mv path/to/oldfile !#:1:h/newfile
其中的!#:1:h
意思是:从您当前键入的行(“!#”)中,获取第一个单词(“:1”),然后仅从其获取路径部分(“:h”-头)。
您可以使用大括号扩展:
mv path/to/{old_filename.txt,new_filename.txt}
这是指向bash shell中的括号扩展的GNU指南的链接,该指南定义了一个替换列表,并告诉bash每次重复使用一个不同的替换来重复该参数。
例如,
a{b,c,dd,e}
将扩展到
ab ac add ae
唯一的警告是扩展的重复必须能够彼此跟随,作为目标程序的参数。
mv path/to/{old,new}_filename.txt
。这也有助于命令的反转或其他接近重复的操作。我已经做了很多次,例如mv /etc/X11/xorg.conf{,.backup}
,能够通过简单的更改来逆转该过程mv /etc/X11/xorg.conf{.backup,}
。
达斯(Darth)的答案很聪明,但是如果您想使用的方法cd
,还可以考虑使用subshell:
(cd path/to && mv old_filename.txt new_filename.txt)
因为目录更改发生在子外壳程序中,所以您实际上不会在交互式外壳程序中更改目录。
old_filename.txt
。
我喜欢@Darth的答案。这是一个替代方案:cd path/to && mv oldfile newfile && cd -
mv
失败(例如,没有权限),您将留在path/to
目录中。您可以尝试cd path/to && mv oldfile newfile ; cd -
确保cd -
始终运行,除非cd path/to
(没有权限)失败,否则您仍将执行cd -
并转到不需要的上一个目录。mlc(+1)子外壳答案更好。我猜cd . && cd path/to && mv oldfile newfile ; cd -
会在99.9%的时间内正常工作(cd .
只有在您或您当前的dirs权限更改后才会失败;在这种情况下,转到其他目录并没有那么糟糕的结果。)