如何创建目录并将工作目录更改为新目录?


18

我正在寻找一种创建目录的方法,只需使用一个命令即可将我当前的工作目录更改为新创建的目录。我怎样才能做到这一点?

即而不是做

user@Computer:~$ mkdir NewDirectory
user@Computer:~$ cd NewDirectory
user@Computer:~/NewDirectory$ 

我想要做

user@computer:~$ **command** NewDirectory
user@Computer:~/NewDirectory$

命令可以是什么?

Answers:


27

如果您真的希望它只是一个命令,建议您将以下内容添加到您的.bashrc

md () { mkdir -p "$@" && cd "$1"; }

md foo然后在命令行中输入将创建一个名为的目录foocd然后立即进入该目录。请记住,.bashrc为了使更改生效(例如,打开新控制台或运行source ~/.bashrc),您将必须重新加载。

cf. 同样,http://www.commandlinefu.com/commands/view/3613/create-a-directory-and-change-into-it-at-the-same-same-time也可以。


19

mkdir "NewDirectory" && cd "NewDirectory"

  • &&仅当第一个命令成功执行时,才会执行后面的部分。
  • 它在Bash手册中称为命令列表
  • 还有一个简写版本:

    mkdir "NewDirectory" && cd "$_"
    
  • 命令行示例:

    $ false && echo "yes"
    $ true && echo "yes"
    yes
    
  • (编辑)在命令中添加“”,因为目录可能包含空格。


mkdir "NewDir" && cd "$_"mkdir "NewDir" && cd "NewDir"自动完成不起作用更有效。顺便说一句什么是“ $ _”?
TheKojuEffect 2013年

除此之外,如果我们可以将一个开关附加到 mkdir以更改为创建的新目录。
TheKojuEffect 2013年

@TheKojuEffect $ _参见gnu.org/software/bash/manual/bashref.html#Lists 关于最后一个:没有人阻止您在其中使用别名或函数.bashrc;)
Rinzwind 2013年

7

没有内置函数,但是您可以使用外壳程序功能来帮助您不必cd在运行后再次键入命令的参数mkdir

  • 键入cd ,然后Esc .(或Alt+ .)插入上一个命令的最后一个参数。
  • cd !$cd上一个命令的最后一个参数上执行。
  • 按调Up出前一个命令行,然后对其进行编辑以将其更改mkdircd

您可以在以下代码中定义一个简单的“更改目录”功能~/.bashrc

mkcd () { mkdir "$1" && cd "$1"; }

重新加载.bashrc. ~/.bashrc)或重新启动bash,现在可以键入mkcd new-directory

这个简单的版本在某些涉及奇怪的目录名或..符号链接的异常情况下会失败。这是一个。有关说明,请参见此问题的Unix和Linux版本

mkcd () {
  case "$1" in
    /*) mkdir -p "$1" && cd "$1";;
    */../*) (cd "./${1%/../*}/.." && mkdir -p "./${1##*/../}") && cd "$1";;
    ../*) (cd .. && mkdir -p "${1#.}") && cd "$1";;
    *) mkdir -p "./$1" && cd "./$1";;
  esac
}

我的+1专用于Bash特定于对最后命令参数的引用。
0xC0000022L13年

+1用于工程设计。精益求精!:)
mhvelplund

3
mkdir -p "as/many dirs/as you/want" && cd "$_"

上面列出了一个解决方案(与我的解决方案相同,但是没有-p选项),但是我认为它有一些陷阱。

man mkdir
...
-p, --parents
       no error if existing, make parent directories as needed
...

这给了我们两个好处:

  1. 我们可以一次创建任意数量的子目录
  2. 如果目录存在,它将不会引发错误,并且我们仍然可以切换到现有目录。

&& cd "$_"将更改为新创建的目录,因为$_保留值返回了mymkdir


这对我
有用
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.