如何使用Bash递归地创建不存在的子目录?

如何使用Bash递归地创建不存在的子目录?,bash,shell,recursion,subdirectory,Bash,Shell,Recursion,Subdirectory,我正在创建一个快速备份脚本,该脚本将把一些数据库转储到一个漂亮/整洁的目录结构中,我意识到在创建目录之前,我需要进行测试以确保目录存在。我的代码很有效,但似乎有更好的方法。有什么建议吗 [ -d "$BACKUP_DIR" ] || mkdir "$BACKUP_DIR" [ -d "$BACKUP_DIR/$client" ] || mkdir "$BACKUP_DIR/$client" [ -d "$BACKUP_DIR/$client/$year" ] || mkdir "$BACKUP_

我正在创建一个快速备份脚本,该脚本将把一些数据库转储到一个漂亮/整洁的目录结构中,我意识到在创建目录之前,我需要进行测试以确保目录存在。我的代码很有效,但似乎有更好的方法。有什么建议吗

[ -d "$BACKUP_DIR" ] || mkdir "$BACKUP_DIR"
[ -d "$BACKUP_DIR/$client" ] || mkdir "$BACKUP_DIR/$client"
[ -d "$BACKUP_DIR/$client/$year" ] || mkdir "$BACKUP_DIR/$client/$year"
[ -d "$BACKUP_DIR/$client/$year/$month" ] || mkdir "$BACKUP_DIR/$client/$year/$month"
[ -d "$BACKUP_DIR/$client/$year/$month/$day" ] || mkdir "$BACKUP_DIR/$client/$year/$month/$day"

您可以使用
-p
参数,即:

-p、 --父母

无错误(如果存在),根据需要创建父目录

因此:


虽然现有的答案肯定能解决这个问题,但如果您希望在两个不同的子目录下复制嵌套目录结构,那么您可以这样做

mkdir -p {main,test}/{resources,scala/com/company}
它将在调用它的目录下创建以下目录结构

├── main
│   ├── resources
│   └── scala
│       └── com
│           └── company
└── test
    ├── resources
    └── scala
        └── com
            └── company
示例取自创建SBT目录结构的示例

mkdir-p newDir/subdir{1..8}
新迪尔酒店/
细分1细分2细分3细分4细分5细分6细分7细分8

@bmargulies-天哪,这比我想象的要简单得多,因为你是一个删除主义者。哎呀,大约一年前就开始了!如果用户无权读取其中一个间歇文件夹
别名mkdirs=mkdir-p
,则此选项无效。您可能需要解释bash中的
{…,…}
以及您的操作有意义的原因。对支架扩展的简短解释将有助于其他用户。“你能做到”和“这”让人有点想像力。我同意@DavidC.Rankin。这个答案很完美,但需要解释括号符号的实际作用。这将在
newDir/
中创建8个子目录。
mkdir -p {main,test}/{resources,scala/com/company}
├── main
│   ├── resources
│   └── scala
│       └── com
│           └── company
└── test
    ├── resources
    └── scala
        └── com
            └── company