我发现自己经常需要重命名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.txt
with 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 的工作目录。