4 command-line shell cd-command mv
我有一个位于里面的目录/var/www/html。我将这个目录mv从example1重命名为example2。
如何在名称更改时输入新命名的目录?
你将如何实现这一目标?可以用find, mmin,0*60吗?
我的目标是重命名和输入一个操作而不是两个不同的操作。
理想情况下,我的目标是单行解决方案,而无需在系统中自定义任何内容。
你可以在你的 .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 ../bar,cd可以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 -