2009-11-13 12 views
133

Ich erstelle ein schnelles Backup-Skript, das einige Datenbanken in eine schöne/ordentliche Verzeichnisstruktur ablegt, und ich erkannte, dass ich testen muss, um sicherzustellen, dass die Verzeichnisse existieren, bevor ich sie erstelle. Der Code, den ich habe funktioniert, aber es scheint, dass es einen besseren Weg gibt, es zu tun. Irgendwelche Vorschläge?Wie werden nicht vorhandene Unterverzeichnisse rekursiv mit Bash erstellt?

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

Antwort

340

können Sie den -p-Parameter verwenden, die documented as ist:

-p, --parents

keinen Fehler, falls vorhanden, übergeordnete Verzeichnisse machen als

benötigt

Also:

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

@bmargulies - Heilige Scheiße, die viel einfacher war, als ich dachte = P –

+0

Upvoted, weil du ein Deletionist bist. Ups, schon vor etwa einem Jahr! –

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

+1 für das Beispiel. – mskfisher

1

Während bestehende Antworten auf jeden Fall den Zweck lösen, wenn your'e verschachtelte Verzeichnisstruktur unter zwei verschiedenen Unterverzeichnissen suchen replizieren, dann können Sie dies tun

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

Es folgende Verzeichnisstruktur unter dem Verzeichnis erstellen wird von wo aus es

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

Das Beispiel aufgerufen wird, wurde SBT Verzeichnisstruktur für die Erstellung von this link genommen

+2

Vielleicht möchten Sie erklären, was "{..., ...}" in der Bash ist und warum das, was Sie tun, sinnvoll ist. Eine kurze Erläuterung der * Klammererweiterung * wäre für andere Benutzer von Vorteil. Ein "du kannst das machen" und "dieses" bekommt ein wenig die Vorstellungskraft. –

Verwandte Themen