如何“就地”重命名嵌套路径中的文件,即无需重新键入完整路径?

如何“就地”重命名嵌套路径中的文件,即无需重新键入完整路径?

我发现自己经常需要重命名mv深层目录中的不同文件:

mv /a/long/path/to/a/file.txt /a/long/path/to/a/file.txt.bak

但我不想重新输入完​​整路径名。有没有我可以使用的快速简写或别名? IE:

$ mv /a/long/path/to/a/file.txt file.txt.bak
$ ls /a/long/path/to/a/file.txt.bak
a/long/path/to/a/file.txt.bak

(注意:这是为了在不同时间在不同目录中进行简单的单个文件重命名,而不是为了大规模重命名

答案1

用一个大括号扩展

mv /a/long/path/to/a/file.txt{,.bak}

这会将/a/long/path/to/a/file.txt空后缀重命名为/a/long/path/to/a/file.txtwith suffix .bak

答案2

虽然我可能会使用大括号扩展,如图所示弗莱迪的回答,两者都bash可以zsh使用交互式历史扩展,用指示符#$来指代当前行上迄今为止输入的最后一个单词:

mv /a/long/path/to/a/file.txt !#$.bak

答案3

这可能是一个基本问题,但我没有找到现有的问题/答案。我制作的简单解决方案是~./bash_functions** 中的一个函数:

#/home/user/.bash_functions

function mv-rn() {
  mv $1 $(dirname $1)/${2}
}

所以现在:

$ mv-rn /a/long/path/to/a/file.txt file.txt.bak
$ ls /a/long/path/to/a/file.txt.bak
a/long/path/to/a/file.txt.bak

(**注意,您必须在 ~/.bashrc 中包含此内容才能将上述函数识别为别名):

# Function definitions.
if [ -f ~/.bash_functions ]; then
    . ~/.bash_functions
fi

答案4

(cd /a/long/path/to/a && mv file.txt file.txt.bak)

确保&&仅当 cd 成功时才会执行 mv。括号意味着命令将在子 shell 中执行,因此 cd 不会更改现有 shell 的工作目录。

相关内容