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

Asked
Viewd99202

194

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

 [ -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"
 
  • http://unix.stackexchange.com/questions/49263/recursive-mkdir

    Ciro Santilli 郝海东冠状病六四事件法轮功August 16, 2016 16:59

4 个答案

436

您可以使用-p参数,该参数记录为

-p,-父母

如果没有错误,请根据需要设置父目录

所以:

 mkdir -p "$BACKUP_DIR/$client/$year/$month/$day"
 
  • 已被删除,因为您是删除主义者。糟糕,已经大约一年前了!

    Aaron HallFebruary 03, 2015 21:50
  • 如果用户无权读取一个间歇性文件夹之一,则无法正常工作

    TheKitMurkitApril 22, 2018 08:11
  • alias mkdirs=mkdir -p

    dr jerryJuly 24, 2018 19:23
  • @bmargulies-比我想像中简单的废话= P

    Topher FangioNovember 13, 2009 20:48
0
 mkdir -p newDir/subdir{1..8}
ls newDir/
subdir1 subdir2 subdir3 subdir4 subdir5 subdir6 subdir7 subdir8
 
14

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

 mkdir -p {main,test}/{resources,scala/com/company}
 

它将在调用它的目录下创建以下目录结构

 ├── main
│   ├── resources
│   └── scala
│       └── com
│           └── company
└── test
    ├── resources
    └── scala
        └── com
            └── company
 

该示例摘自此链接,用于创建SBT目录结构

  • 我同意@ DavidC.Rankin的观点。这个答案是完美的恕我直言,但它需要解释括号符号的实际作用。

    DelaliDecember 09, 2018 15:44
  • 您可能想解释一下bash中的{...,...}以及为什么您的操作有意义。
    brace扩展的简短说明将对其他用户有所帮助。“您可以做到”并获得“这个”,这让想像力有些不足。

    David C. RankinDecember 22, 2017 05:43
67
 $ mkdir -p "$BACKUP_DIR/$client/$year/$month/$day"