在命令行中,假设我的pwd
是这样的:
/home/whatever
我想要重命名某个深层目录中的一个文件。通常我会这样做:
# mv /var/some/deep/folder/structure/fileA /var/some/deep/folder/structure/fileB
问题是,是否有任何命令行技巧可以重命名文件/目录,而无需再次输入整个目录结构?例如:
# mv /var/some/deep/folder/structure/fileA fileB
该命令的问题在于它将 fileA 移动到了您的pwd
。显然我想将其保留在同一位置并简单地重命名。所以正如我所说,有没有什么技巧可以实现这一点而不必再次输入整个目录结构?这只是出于好奇和懒惰而提出的问题。
答案1
取决于你的 shell。在 zsh 中你可以:
mv /var/some/deep/folder/structure/{fileA,fileB}
如果您正在使用 bash,请考虑迁移到 zsh - 这是一个非常简单的过程,我相信您会喜欢 zsh。:)
编辑:
它似乎在 bash 中起作用,请参阅 Lunar_Lamp 的评论。
答案2
至少有三个技巧可以消除重复打字。
...它们都可以在 Bourne-Again shell、Korn shell 和 Z shell 中运行。
- 使用 shell 变量:
dir=/var/some/deep/folder/structure mv "${dir}"/文件A mv "${dir}"/文件B
- 使用括号扩展:
mv /var/some/deep/folder/structure/{文件A,文件B}
- 使用子 shell:
(cd /var/some/deep/folder/structure/ && mv 文件A 文件B)
其他减少输入的技巧包括更多特定于 shell 的技巧(例如函数和别名),以及与 shell 无关的技巧,例如使用终端仿真器的复制和粘贴功能。 ☺
答案3
虽然可能有更有效的捷径,但我经常使用以下两种方法:
aa=/var/some/deep/folder/structure/
mv "$aa"fileA "$aa"fileB
或者
cd /var/some/deep/folder/structure
mv fileA fileB
cd -
现在,显然它们不是您所追求的有效解决方案,但它们都(在我看来)比每次输入完整路径更快。