可能重复:
在 bash 命令上重复使用文本
如果我想重命名几个目录深处的文件,如何避免重复路径?
例如:
mv path/to/old_filename.txt path/to/new_filename.txt
我想知道是否有办法做到这一点:
mv path/to/old_filename.txt (?)new_filename.txt
哪里(?)
可以有某种方式表示“在同一目录中”。
答案1
使用 bash历史扩展:
mv path/to/oldfile !#:1:h/newfile
其中的!#:1:h
意思是:从您当前正在输入的行(“!#”)中取出第一个单词(“:1”),然后仅从中取出路径部分(“:h”--头部)。
答案2
您可以使用括号扩展:
mv path/to/{old_filename.txt,new_filename.txt}
这里是指向 bash shell 中大括号扩展的 GNU 指南的链接,该指南定义了替代列表并告诉 bash 每次重复时使用不同的替代来重复该参数。
例如,
a{b,c,dd,e}
将扩大至
ab ac add ae
唯一的警告是扩展的重复必须能够作为目标程序的参数相互跟随。
答案3
达斯的回答上面的方法很聪明,但如果您想使用带有的方法cd
,您还可以考虑使用子 shell:
(cd path/to && mv old_filename.txt new_filename.txt)
因为目录更改发生在子 shell 中,所以您实际上不会在交互式 shell 中更改目录。
答案4
如果您要在目录中执行多个命令,另一个有用的替代方法是:
pushd /path/to
mv oldfile newfile
...
popd