ChatGPT解决这个技术问题 Extra ChatGPT

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

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

这似乎不起作用。任何人都可以帮忙吗?

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

k
konsolebox

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

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

其次,由于您为 mkdir 使用 -p 开关,因此此检查是无用的,因为它首先是 does。写吧:

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

就是这样。


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

实际上没有必要检查它是否存在。由于您已经想创建它(如果它存在),只需 mkdir 即可

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

注意:如果需要,-p 标志会导致创建任何父目录。
A
Automatico

只需这样做:

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 并没有完全忽略错误:它调用了一种不同的模式,其中创建了任何不存在的路径组件(因此,如果发生需要创建零的情况,这不是错误)。行为是不同的,因为它将创建除最后一个之外的组件,这可能是可取的,也可能不是。
d
dogbane

[] 括号内需要空格:

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

p
plesiv

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

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

嗯,不干净:只是更短。如果遇到这种说法,很难理解它的含义。
我喜欢这样,尽管 -p 参数使检查变得不必要。当您不想使用 -p 时,您仍然可以使用它,即当您不想自动创建所有父目录时。
实际上写 [ -d /path/to/dir ] || mkdir /path/to/dir 更短。当左侧为假时,右侧执行。
i
ivy

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

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

J
Jason

在任何地方创建目录

OUTPUT_DIR=随便

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