在 bash 中,如何重命名文件而不重复路径?

在 bash 中,如何重命名文件而不重复路径?

可能重复:
在 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

相关内容