2013-09-04 41 views
53

मौजूद नहीं है मेरी bash स्क्रिप्ट में मुझे क्या करना:केवल mkdir अगर यह

mkdir product; 

जब मैं स्क्रिप्ट से एक बार मैं अधिक चलाएँ:

mkdir: product: File exists 

कंसोल में।

तो अगर मैं डीआईआर मौजूद नहीं हूं तो मैं केवल mkdir चलाने की सोच रहा हूं। क्या यह संभव है?

+1

mkdir उत्पाद 2>/dev/null – dcaswell

उत्तर

121

एक परीक्षण

[[ -d dir ]] || mkdir dir 

करो या विकल्प -p का उपयोग करें:

mkdir -p dir 
+2

मुझे फ्लाई पर स्रोत नहीं मिल रहा है, लेकिन मेकफ़ाइल 'mkdir -p' के लिए बी/सी को हतोत्साहित किया गया है समवर्ती निष्पादन में दौड़ की स्थिति हो सकती है। तो, आपकी स्क्रिप्ट क्या करता है इसके आधार पर और किस माहौल में यह पहला विकल्प दिया जाता है, यह उत्तर प्राथमिकता दी जानी चाहिए। इसके अलावा, आप केवल 'mkdir उत्पाद 2>/dev/null' कर सकते हैं और परवाह नहीं करते हैं। – user1129682

+1

@ user1129682: पहले विकल्प में संभावित दौड़ की स्थिति भी है; निर्देशिका '-d' परीक्षण और' mkdir' के बीच किसी अन्य प्रक्रिया द्वारा बनाई जा सकती है। मुझे संदेह है कि 'mkdir -p' इस दौड़ की स्थिति के लिए इस समय की खिड़की को थोड़ा छोटा बनाता है। –

+0

अनावश्यक परीक्षण में दौड़ की स्थिति के अलावा, यह भी संभावना है कि 'dir' मौजूद है ** लेकिन निर्देशिका नहीं है **, लेकिन एक फ़ाइल या डिवाइस एंट्री या यूनिक्स-डोमेन सॉकेट या नामित पाइप, या _whatever_ ... – wildplasser

3

mkdir -p

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

8

mkdir के -p विकल्प का उपयोग करें, लेकिन ध्यान दें कि इसका एक और प्रभाव भी है।

-p  Create intermediate directories as required. If this option is not specified, the full path prefix of each oper- 
     and must already exist. On the other hand, with this option specified, no error will be reported if a directory 
     given as an operand already exists. Intermediate directories are created with permission bits of rwxrwxrwx 
     (0777) as modified by the current umask, plus write and search permission for the owner. 
2

इस का उपयोग करके देखें: -

mkdir -p dir; 

नोट: - यह भी किसी भी मध्यवर्ती निर्देशिका मौजूद नहीं है कि पैदा करेगा; उदाहरण के लिए,

चेक बाहर mkdir -p

या इस कोशिश: -

if [[ ! -e $dir ]]; then 
    mkdir $dir 
elif [[ ! -d $dir ]]; then 
    echo "$Message" 1>&2 
fi 
40
if [ ! -d directory ]; then 
    mkdir directory 
fi 

या

mkdir -p directory 

-p निर्माण करता है, तो directory मौजूद नहीं है सुनिश्चित करता है

+2

एक-लाइनर के लिए अतिरिक्त ';': 'if '' की आवश्यकता होती है! -डी निर्देशिका]; फिर mkdir निर्देशिका; fi' – sdgfsdh

संबंधित मुद्दे