2009-11-13 5 views
133

Je crée un script de sauvegarde rapide qui va vider certaines bases de données dans une structure de répertoire sympa/soignée et je me suis rendu compte que j'ai besoin de tester pour m'assurer que les répertoires existent avant de les créer. Le code que j'ai fonctionne, mais il semble qu'il existe une meilleure façon de le faire. Aucune suggestion?Comment créer des sous-répertoires inexistants récursivement en utilisant Bash?

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

http://unix.stackexchange.com/questions/49263/recursive-mkdir –

Répondre

340

Vous pouvez utiliser le paramètre -p, qui est documented as:

-p, --parents

aucune erreur si elle existe, créer des répertoires parents au besoin

Donc:

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

@bmargulies - De la merde qui était beaucoup plus simple que je ne le pensais = P –

+0

Upvoted parce que vous êtes un suppresseur. Oups, il y a déjà un an! –

61
$ mkdir -p "$BACKUP_DIR/$client/$year/$month/$day" 
+8

+1 pour l'exemple. – mskfisher

1

Alors que les réponses existantes à résoudre définitivement le but, si your'e cherche à reproduire la structure de répertoire imbriqué sous deux sous-répertoires différents, vous pouvez le faire

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

Il va créer la structure de répertoire suivant dans le répertoire d'où il est invoqué

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

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

+2

Vous pouvez expliquer ce que '{..., ...}' est dans bash et pourquoi ce que vous faites a du sens. Une brève explication de l'expansion de l'accolade * serait bénéfique pour les autres utilisateurs. Un "vous pouvez le faire" et obtenir "ceci" laisse un peu à l'imagination. –

Questions connexes