कैसे बैश का उपयोग करते हुए कोई भी सबटेक्शनल सबटेक्लेटरी नहीं बनाई जाए?


191

मैं एक त्वरित बैकअप स्क्रिप्ट बना रहा हूं, जो कुछ डेटाबेसों को एक अच्छी / साफ-सुथरी निर्देशिका संरचना में डंप कर देगा और मुझे एहसास हुआ कि मुझे यह सुनिश्चित करने के लिए परीक्षण करने की आवश्यकता है कि निर्देशिकाएं मुझे बनाने से पहले मौजूद हैं। मेरे पास कोड काम करता है, लेकिन ऐसा लगता है कि इसे करने का एक बेहतर तरीका है। कोई सुझाव?

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

जवाबों:


430

आप -pपैरामीटर का उपयोग कर सकते हैं , जिसे निम्न के रूप में प्रलेखित किया गया है :

-पी, - अपरेंट्स

यदि कोई त्रुटि है, तो मौजूदा, मूल निर्देशिका को आवश्यकतानुसार बनायें

इसलिए:

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

30
@bmargulies - पवित्र बकवास जो मेरे विचार से आसान था = P
Topher Fangio

अपवादात्मक क्योंकि आप एक विलोपनवादी हैं। उफ़, पहले ही लगभग एक साल पहले किया था!
हारून हॉल

यह काम नहीं करता है अगर उपयोगकर्ता के पास रुक-रुक कर फ़ोल्डर्स को पढ़ने का कोई अधिकार नहीं है
TheKitMurkit

1
alias mkdirs=mkdir -p
डॉ जेरी


14

हालांकि मौजूदा उत्तर निश्चित रूप से उद्देश्य को हल करते हैं, अगर आपका 'दो अलग-अलग उपनिर्देशिकाओं के तहत नेस्टेड डायरेक्टरी स्ट्रक्चर को दोहराने की तलाश में है, तो आप यह कर सकते हैं

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

यह निर्देशिका के अंतर्गत निम्नलिखित निर्देशिका संरचना बनाएगा जहाँ से इसे लागू किया गया है

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

SBT निर्देशिका संरचना बनाने के लिए इस लिंक से उदाहरण लिया गया था


9
आप यह समझाना चाह सकते हैं कि क्या क्या {...,...}है और क्या कर रहा है, यह समझ में आता है। ब्रेस विस्तार की एक छोटी व्याख्या अन्य उपयोगकर्ताओं के लिए फायदेमंद होगी। एक "आप ऐसा कर सकते हैं" और "यह" प्राप्त करना कल्पना को थोड़ा छोड़ देता है।
डेविड सी।

मैं @ DavidC.Rankin से सहमत हूं। यह उत्तर सही IMHO है, लेकिन यह व्याख्या करने की आवश्यकता है कि ब्रैकेट संकेतन वास्तव में क्या करता है।
डेलली

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.