Bash kullanarak ardışık olmayan alt dizinler nasıl oluşturulur?


191

Bazı veritabanlarını güzel / temiz bir dizin yapısına dökecek hızlı bir yedekleme komut dosyası oluşturuyorum ve dizinleri oluşturmadan önce var olduğundan emin olmak için sınamam gerektiğini fark ettim. Sahip olduğum kod çalışıyor, ancak bunu yapmak için daha iyi bir yolu var gibi görünüyor. Baska öneri?

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

Yanıtlar:


431

Şu şekilde belgelenen-p parametreyi kullanabilirsiniz :

-p, - ebeveynler

hata yoksa, üst dizinleri gerektiği gibi yapın

Yani:

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

30
@bmargulies - Düşündüğümden çok daha basit olan kutsal saçmalık = P
Topher Fangio

Silindiğiniz için iptal edildi. Hata! Zaten yaklaşık bir yıl önce yaptı!
Aaron Hall

Kullanıcının aralıklı klasörlerden birini okuma hakkı yoksa çalışmaz
TheKitMurkit

1
alias mkdirs=mkdir -p
dr jerry


14

Varolan yanıtlar kesinlikle amacı çözerken, iç içe dizin yapısını iki farklı alt dizin altında çoğaltmak istiyorsanız, bunu yapabilirsiniz

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

Çağrıldığı dizinin altında aşağıdaki dizin yapısını oluşturur

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

SBT dizin yapısı oluşturmak için bu linkten örnek alınmıştır


9
Bash'da ne {...,...}olduğunu ve yaptıklarınızın neden mantıklı olduğunu açıklamak isteyebilirsiniz . Brace genişlemesinin kısa bir açıklaması diğer kullanıcılar için faydalı olacaktır. Bir "bunu yapabilirsiniz" ve "bu" olsun biraz hayal gücüne bırakır.
David C. Rankin

@ DavidC.Rankin'e katılıyorum. Bu cevap mükemmel IMHO'dur, ancak köşeli parantez gösteriminin gerçekte ne yaptığını açıklaması gerekir.
Delali

0
mkdir -p newDir/subdir{1..8}
ls newDir/
subdir1 subdir2 subdir3 subdir4 subdir5 subdir6 subdir7 subdir8

Bu, içinde sadece 8 alt dizin oluşturacaktır newDir/.
csabinho
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.