立即输入您重命名的最后一个目录

4 command-line shell cd-command mv

我有一个位于里面的目录/var/www/html。我将这个目录mvexample1重命名为example2

如何在名称更改时输入新命名的目录?

你将如何实现这一目标?可以用find, mmin,0*60吗?

我的目标是重命名和输入一个操作而不是两个不同的操作。

理想情况下,我的目标是单行解决方案,而无需在系统中自定义任何内容。

Lie*_*yan 7

你可以在你的 .bashrc 或 .bash_aliases 文件中添加它(如果你的 shell 不是,或者等效的bash):

mvcd () {
    mv -- "$1" "$2" &&
      cd -P -- "$2"
}
Run Code Online (Sandbox Code Playgroud)

然后,重新启动您的外壳,然后您可以像这样使用该功能:

mvcd foo bar
Run Code Online (Sandbox Code Playgroud)

这假定$2是不作为,否则现有的目录mv会移动 $1 它,而不是它(见-TGNU的选项mv,以防止这一点)。

--标志着选项的结束。mv "$1" "$2"mv "$option_or_source" "$option_or_argument_to_first_option_or_destination"mv -- "$1" "$2"保证$1$2不被视为选项,即使它们的名称-mv -- "$source" "$destination". 通常,您希望--在给定任意参数的命令的任何地方使用。

-P(用于物理目录遍历)是为了防止cdPOSIX shell的内置默认情况下对..路径组件进行特殊处理,以便它处理$2相同的内容mv。没有它,在cdmv foo ../barcd可以cd到不同的bar目录从一个mv更名foo为。

如果您已经设置$CDPATH(或者它在 shell 启动时的环境中),您还需要为该一次cd调用禁用它:

mvcd () {
    mv -- "$1" "$2" &&
      CDPATH= cd -P -- "$2"
}
Run Code Online (Sandbox Code Playgroud)

一些额外的角落问题仍然存在:(-在某些 shell 中-2+3)即使在--. 如果要重命名foo-,请使用mvcd foo ./-代替mvcd foo -

  • @Benia:你认为需要什么样的阐述?我认为这很简单,再多只会混淆要点。如果您希望我澄清答案的任何/特定/方面,我可以对此进行扩展,否则我可以添加二十页的详细说明,但仍然无法解决您的任何具体疑问。您可能需要阅读 [shell 文档](http://tldp.org/LDP/abs/html/functions.html) 以了解有关 shell 函数如何工作的更多详细信息。 (2认同)
  • @Benia,我是编辑那些的人。有关详细信息,请参阅编辑。 (2认同)