Comment créer des sous-répertoires inexistants de manière récursive en utilisant Bash?

Je crée un script de sauvegarde rapide qui va sauvegarder certaines bases de données dans une structure de répertoires sympa / soignée et j’ai réalisé que je devais tester pour m’assurer que les répertoires existent avant de les créer. Le code que j’ai fonctionne, mais il semble y avoir un meilleur moyen de le faire. Aucune suggestion?

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

Vous pouvez utiliser le paramètre -p , documenté comme suit :

-p, –parents

aucune erreur si elle existe, créez des répertoires parent selon vos besoins

Alors:

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

Bien que les réponses existantes résolvent définitivement le problème, si vous cherchez à répliquer une structure de répertoires nestede sous deux sous-répertoires différents, vous pouvez le faire

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

Il créera la structure de répertoires suivante sous le répertoire d’où il est appelé

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

L’exemple a été tiré de ce lien pour créer une structure de répertoire SBT