Как создать несуществующие подкаталоги рекурсивно, используя 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"
3 ответа
Вы можете использовать -p
параметр, который задокументирован как:
-p, --parents
без ошибок, если есть, создайте родительские каталоги по мере необходимости
Так:
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
mkdir -p newDir/subdir{1..8}
ls newDir/
subdir1 subdir2 subdir3 subdir4 subdir5 subdir6 subdir7 subdir8