How to create nonexistent subdirectories recursively using Bash?

早过忘川 提交于 2019-11-26 11:48:49

问题


I am creating a quick backup script that will dump some databases into a nice/neat directory structure and I realized that I need to test to make sure that the directories exist before I create them. The code I have works, but it seems that there is a better way to do it. Any suggestions?

[ -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\"

回答1:


You can use the -p parameter, which is documented as:

-p, --parents

no error if existing, make parent directories as needed

So:

mkdir -p "$BACKUP_DIR/$client/$year/$month/$day"



回答2:


$ mkdir -p "$BACKUP_DIR/$client/$year/$month/$day"



回答3:


While existing answers definitely solve the purpose, if your'e looking to replicate nested directory structure under two different subdirectories, then you can do this

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

It will create following directory structure under the directory from where it is invoked

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

The example was taken from this link for creating SBT directory structure




回答4:


mkdir -p newDir/subdir{1..8}
ls newDir/
subdir1 subdir2 subdir3 subdir4 subdir5 subdir6 subdir7 subdir8


来源:https://stackoverflow.com/questions/1731767/how-to-create-nonexistent-subdirectories-recursively-using-bash

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!