【问题标题】:How to use Bash to create a folder if it doesn't already exist?如果文件夹尚不存在,如何使用 Bash 创建文件夹?
【发布时间】:2011-06-21 20:26:01
【问题描述】:
#!/bin/bash
if [!-d /home/mlzboy/b2c2/shared/db]; then
    mkdir -p /home/mlzboy/b2c2/shared/db;
fi;

这似乎不起作用。有人可以帮忙吗?

【问题讨论】:

  • 为什么有分号?
  • ; 标记是命令分隔符,换行符也是。由于then 是一个单独的命令,因此需要前面的分号才能将其写入同一行。 mkdirfi 之后的分号是多余的。

标签: bash directory


【解决方案1】:

首先,在 Bash 中 [ 只是一个命令,它需要字符串 ] 作为最后一个参数,所以右括号之前的空格(以及 !-d 之间需要两个单独的参数)是重要的

if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
  mkdir -p /home/mlzboy/b2c2/shared/db;
fi

其次,由于您使用-p 切换mkdir,因此此检查是无用的,因为它首先是does。随便写:

mkdir -p /home/mlzboy/b2c2/shared/db;

就是这样。

【讨论】:

  • 注意:-p 标志会在必要时创建任何父目录。
  • 天哪,我从来不知道“[”是一个命令。这解释了我的许多问题......很容易成为我在 StackOverflow 上读过的最有用的东西。
  • 哇!知道“[”是 bash 中的一个命令真是令人大开眼界。我觉得我的 bash 脚本的很多问题现在都已经解决了!
  • 难以置信地发现“[”是一个命令。这让很多以前没有意义的事情对我来说是点击了。谢谢!
  • 如何检查使用正则表达式来识别文件夹?例如:如果 [ ! -d /home/mlzboy/b2*/shared/db ];
【解决方案2】:

其实没有必要去检查它是否存在。既然你已经想创建它(如果它存在的话),那么 mkdir 就可以了

mkdir -p /home/mlzboy/b2c2/shared/db

【讨论】:

  • 注意:-p 标志会在必要时创建任何父目录。
【解决方案3】:

简单地做:

mkdir /path/to/your/potentially/existing/folder

如果文件夹已经存在,mkdir 将抛出错误。要忽略错误,请写:

mkdir -p /path/to/your/potentially/existing/folder

不需要做任何检查或类似的事情。


供参考:

-p, --parents no error if existing, make parent directories as neededhttp://man7.org/linux/man-pages/man1/mkdir.1.html

【讨论】:

  • 参数-p 并没有完全忽略错误:它调用了一种不同的模式,其中创建了任何不存在的路径组件(因此,如果发生零需要被创建)。行为是不同的,因为它会创建除最后一个之外的组件,这可能是可取的,也可能是不可取的。
【解决方案4】:

[] 括号内需要空格:

#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ] 
then
    mkdir -p /home/mlzboy/b2c2/shared/db
fi

【讨论】:

    【解决方案5】:

    更简洁的方式,利用 shell 逻辑运算符的快捷评估。仅当左侧为真时,才执行运算符的右侧。

    [ ! -d /home/mlzboy/b2c2/shared/db ] && mkdir -p /home/mlzboy/b2c2/shared/db
    

    【讨论】:

    • mmh,不是更干净:只是更短。这样的说法,如果碰到的话,很难理解它的意思。
    • 我喜欢这个,尽管-p 参数使检查变得不必要。当您不想使用-p 时仍然可以使用它,即当您不想自动创建所有父目录时。
    • 其实写[ -d /path/to/dir ] || mkdir /path/to/dir更短..当左边为假时,右边执行。
    【解决方案6】:

    我认为你应该重新格式化你的代码:

    #!/bin/bash
    if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
        mkdir -p /home/mlzboy/b2c2/shared/db;
    fi;
    

    【讨论】:

      【解决方案7】:

      在任何地方创建目录

      OUTPUT_DIR=随便

      if [ ! -d ${OUTPUT_DIR} ]
      then
          mkdir -p ${OUTPUT_DIR}
      fi
      

      【讨论】:

        猜你喜欢
        • 2018-09-05
        • 2011-03-13
        • 2023-03-06
        • 2014-11-24
        • 2011-01-19
        • 2018-02-10
        • 2013-09-18
        • 2011-02-19
        相关资源
        最近更新 更多