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
到它,而不是给它(见-T
GNU的选项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
(用于物理目录遍历)是为了防止cd
POSIX 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 -