Как рекурсивно создавать несуществующие подкаталоги с помощью Bash?
-
20-09-2019 - |
Вопрос
Я создаю сценарий быстрого резервного копирования, который будет сохранять некоторые базы данных в красивую/аккуратную структуру каталогов, и я понял, что мне нужно проверить, существуют ли каталоги, прежде чем я их создам.Код, который у меня есть, работает, но кажется, что есть лучший способ сделать это.Какие-либо предложения?
[ -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"
Решение
Вы можете использовать -p
параметр, который задокументировано как:
-p, --parents
нет ошибок, если они существуют, при необходимости создайте родительские каталоги
Так:
mkdir -p "$BACKUP_DIR/$client/$year/$month/$day"
Другие советы
$ mkdir -p "$BACKUP_DIR/$client/$year/$month/$day"
Хотя существующие ответы определенно решают эту задачу, если вы хотите реплицировать вложенную структуру каталогов в двух разных подкаталогах, вы можете это сделать.
mkdir -p {main,test}/{resources,scala/com/company}
Он создаст следующую структуру каталогов в каталоге, из которого он вызван.
├── main
│ ├── resources
│ └── scala
│ └── com
│ └── company
└── test
├── resources
└── scala
└── com
└── company
Пример был взят из эта ссылка для создания структуры каталогов SBT