web-dev-qa-db-fra.com

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

Je suis en train de créer un script de sauvegarde rapide qui videra certaines bases de données dans une structure de répertoires Nice/neat et je me suis rendu compte que je devais effectuer un test pour vérifier que les répertoires existaient avant de les créer. Le code que j'ai a fonctionne, mais il semble qu'il existe une meilleure façon 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"
167
Topher Fangio

Vous pouvez utiliser le -p paramètre, qui est documenté sous la forme :

-p, --parents

pas d'erreur si elle existe, créez des répertoires parents au besoin

Alors:

mkdir -p "$BACKUP_DIR/$client/$year/$month/$day"
396
bmargulies
$ mkdir -p "$BACKUP_DIR/$client/$year/$month/$day"
64
Jonathan Feinberg

Tandis que les réponses existantes résolvent définitivement le but recherché, si vous souhaitez répliquer la structure de répertoires imbriqués 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épertoire suivante sous le répertoire à partir duquel il est appelé

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

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

8
y2k-shubham