如果文件夹尚不存在,如何使用 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
是一个单独的命令,因此需要前面的分号才能将其写入同一行。 mkdir
和 fi
之后的分号是多余的。
【参考方案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 needed
http://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 创建文件夹?的主要内容,如果未能解决你的问题,请参考以下文章
如果尚不存在则创建存储过程,但是不要更改并且不要删除现有的存储过程