2009-11-13 2 views
133

Я создаю сценарий быстрой резервной копии, который сбрасывает некоторые базы данных в красивую/аккуратную структуру каталогов, и я понял, что мне нужно протестировать, чтобы убедиться, что каталоги существуют до их создания. В коде у меня есть работы, но кажется, что есть лучший способ сделать это. Какие-либо предложения?Как создать несуществующие подкаталоги рекурсивно с помощью 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 –

ответ

340

Вы можете использовать параметр -p, который documented as:

-p, --parents

нет ошибки, если существующие, сделать родительские каталоги при необходимости

Таким образом:

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

@bmargulies - Святое дерьмо, которое было намного проще, чем я думал = P –

+0

Упрощенный, потому что вы делеционист. К сожалению, уже около года назад! –

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

+1 для примера. – mskfisher

1

Хотя существующие ответы определенно решить цель, если your'e хочет скопировать вложенную структуру каталогов в двух различных подкаталогах, то вы можете сделать это

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

Это создаст следующую структуру каталогов в каталоге откуда она вызывается

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

пример был взят из this link для создания структуры каталогов SBT

+2

Возможно, вы захотите объяснить, что '{..., ...}' находится в bash и почему все ваши действия имеют смысл. Краткое объяснение расширения * скобки * было бы полезно для других пользователей. «Вы можете это сделать», и «это» немного уходит в воображение. –

Смежные вопросы