Linux:在当前位置重命名文件/目录,而不将密码更改为该位置?

Linux:在当前位置重命名文件/目录,而不将密码更改为该位置?

在命令行中,假设我的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 -

现在,显然它们不是您所追求的有效解决方案,但它们都(在我看来)比每次输入完整路径更快。

相关内容