2009-11-13 12 views
133

Tworzę skrypt szybkiego tworzenia kopii zapasowych, który zrzuci niektóre bazy danych do ładnej/czystej struktury katalogów i zdałem sobie sprawę, że muszę przetestować, aby upewnić się, że katalogi istnieją przed ich utworzeniem. Kod, który mam działa, ale wydaje się, że jest lepszy sposób na zrobienie tego. Jakieś sugestie?Jak utworzyć nieistniejące podkatalogi rekurencyjnie używając 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 –

Odpowiedz

340

Można użyć parametru -p, który jest documented as:

-p, --parents

żadnego błędu, jeśli istnieją, jak tworzyć katalogi nadrzędne potrzebne

A więc:

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

@bmargulies - Holy crap, które było o wiele prostsze niż myślałem = P –

+0

Wznowienie, ponieważ jesteś deletionistą. Ups, już około rok temu! –

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

+1 dla przykładu. – mskfisher

1

Podczas gdy istniejące odpowiedzi zdecydowanie rozwiązać zadanie, jeśli ty jesteś patrząc replikować zagnieżdżone struktury katalogów w ramach dwóch różnych podkatalogów, to można to zrobić

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

To stworzy następującą strukturę katalogów w katalogu skąd jest wywoływana

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

Przykład została podjęta z this link tworzenia SBT strukturę katalogów

+2

Możesz wyjaśnić, co '{..., ...}' jest w bashu i dlaczego to, co robisz, ma sens. Krótkie wyjaśnienie rozszerzenia * brace * byłoby korzystne dla innych użytkowników. "Możesz to zrobić" i uzyskać "to" pozostawia nieco wyobraźni. –