如果文件夹尚不存在,如何使用 Bash 创建文件夹?

Posted

技术标签:

【中文标题】如果文件夹尚不存在,如何使用 Bash 创建文件夹?【英文标题】:How to use Bash to create a folder if it doesn't already exist? 【发布时间】: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 之后的分号是多余的。 【参考方案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 标志会在必要时创建任何父目录。 天哪,我从来不知道“[”是一个命令。这解释了我的许多问题......很容易成为我在 *** 上读过的最有用的东西。 哇!知道“[”是 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

【讨论】:

以上是关于如果文件夹尚不存在,如何使用 Bash 创建文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

UTL_FILE:无法创建新文件

如果尚不存在则创建存储过程,但是不要更改并且不要删除现有的存储过程

加载 .RData 文件中包含的对象(如果它们尚不存在)

如果存储过程尚不存在,则创建它,但不要更改也不要删除现有的存储过程

创建和/或写入文件

如何使用 Bash 测试文件中是不是存在字符串?