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

mlz*_*boy 165 directory bash

#!/bin/bash
if [!-d /home/mlzboy/b2c2/shared/db]; then
    mkdir -p /home/mlzboy/b2c2/shared/db;
fi;
Run Code Online (Sandbox Code Playgroud)

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

Max*_*yko 264

首先,在bash中,"["只是一个命令,它要求字符串"]"作为最后一个参数,所以在结束括号之前的空格(以及"!"和"-d"之间的空格需要两个独立的参数太重要了):

if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
  mkdir -p /home/mlzboy/b2c2/shared/db;
fi
Run Code Online (Sandbox Code Playgroud)

其次,既然你正在使用-p switch mkdir,那么这个检查是没用的,因为这首先是做什么的.写吧:

mkdir -p /home/mlzboy/b2c2/shared/db;
Run Code Online (Sandbox Code Playgroud)

就是这样.

  • 我的上帝,我从来不知道"["是一个命令.这解释了我的很多问题......很容易就是我在StackOverflow上读过的最有用的东西. (10认同)
  • 哇!知道“[”是 bash 中的命令真是令人大开眼界。我觉得我的 bash 脚本的很多问题现在都已经解决了! (4认同)
  • 令人难以置信的是发现“[”是一个命令。这让我明白了很多以前没有意义的事情。谢谢你! (3认同)
  • 注意:-p标志会在必要时创建任何父目录。 (2认同)

kur*_*umi 91

实际上没有必要检查它是否存在.因为你已经想要创建它,如果它存在,只有mkdir会这样做

mkdir -p /home/mlzboy/b2c2/shared/db
Run Code Online (Sandbox Code Playgroud)

  • 注意:`-p`标志会在必要时创建任何父目录. (2认同)

Aut*_*ico 61

简单地说:

mkdir /path/to/your/potentially/existing/folder
Run Code Online (Sandbox Code Playgroud)

如果文件夹已存在,mkdir将抛出错误.忽略错误写:

mkdir -p /path/to/your/potentially/existing/folder
Run Code Online (Sandbox Code Playgroud)

无需进行任何检查或类似的事情.


以供参考:

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

  • 参数`-p`并不完全忽略错误:它调用一个不同的模式,其中创建了不存在的任何路径组件(因此,如果需要创建零,则不是错误).行为是不同的,因为它将创建除最后一个之外的组件,这可能是或不是可取的. (3认同)

dog*_*ane 20

你需要[]括号内的空格:

#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ] 
then
    mkdir -p /home/mlzboy/b2c2/shared/db
fi
Run Code Online (Sandbox Code Playgroud)


ple*_*siv 17

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

[ ! -d /home/mlzboy/b2c2/shared/db ] && mkdir -p /home/mlzboy/b2c2/shared/db
Run Code Online (Sandbox Code Playgroud)

  • mmh,不干净:只是更短.如果遇到这种说法,很难理解这种说法的含义. (11认同)
  • 实际上写'[-d/path/to/dir] ||会更短 当左侧为假时,执行mkdir/path/to/dir` ..右侧. (3认同)

ivy*_*ivy 5

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

#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
    mkdir -p /home/mlzboy/b2c2/shared/db;
fi;
Run Code Online (Sandbox Code Playgroud)