Как рекурсивно создавать несуществующие подкаталоги с помощью Bash?

StackOverflow https://stackoverflow.com/questions/1731767

Вопрос

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top