Jak tworzyć nieistniejące podkatalogi rekurencyjnie za pomocą Bash?

Tworzę skrypt szybkiego tworzenia kopii zapasowych, który zrzuci niektóre bazy danych do ładnej / schludnej 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, aby to zrobić. Jakieś sugestie?

[ -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"
Author: Mateusz Piotrowski, 2009-11-13

3 answers

Możesz użyć parametru -p, który jest udokumentowany jako :

-P, --parents

No error if existing, make parent directory as needed

Więc:

mkdir -p "$BACKUP_DIR/$client/$year/$month/$day"
 362
Author: bmargulies,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-09 12:48:59
$ mkdir -p "$BACKUP_DIR/$client/$year/$month/$day"
 62
Author: Jonathan Feinberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-13 20:44:18

Chociaż istniejące odpowiedzi zdecydowanie rozwiązują ten cel, jeśli chcesz replikować zagnieżdżoną strukturę katalogów w dwóch różnych podkatalogach, możesz to zrobić

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

Utworzy następującą strukturę katalogów pod katalogiem, z którego jest wywoływany

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

Przykład został zaczerpnięty z tego linku do tworzenia struktury katalogów SBT

 5
Author: y2k-shubham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-22 04:50:51