यदि यह पहले से मौजूद नहीं है, तो फ़ोल्डर बनाने के लिए बैश का उपयोग कैसे करें?


179
#!/bin/bash
if [!-d /home/mlzboy/b2c2/shared/db]; then
    mkdir -p /home/mlzboy/b2c2/shared/db;
fi;

यह काम नहीं लगता है। क्या कोई मदद कर सकता है?


4
आपके पास अर्धविराम क्यों हैं?
ADTC

1
;टोकन, एक कमांड विभाजक है तो न्यू लाइन है। जैसा thenकि एक अलग आदेश है, पूर्ववर्ती अर्धविराम को उसी पंक्ति में लिखने में सक्षम होने की आवश्यकता है। अर्धविराम के बाद mkdirऔर fiअति सूक्ष्म हैं।
एंड्रियास रिडमुएलर

जवाबों:


278

सबसे पहले, बाश में "[" सिर्फ एक कमांड है, जो स्ट्रिंग की उम्मीद करता है "]" अंतिम तर्क के रूप में, इसलिए क्लोजिंग ब्रैकेट से पहले व्हॉट्सएप (और साथ ही "!" और "-d" के लिए दो अलग-अलग तर्क होने चाहिए। भी) महत्वपूर्ण है:

if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
  mkdir -p /home/mlzboy/b2c2/shared/db;
fi

दूसरा, चूंकि आप -p स्विच का उपयोग कर रहे हैं mkdir, यह जाँच बेकार है, क्योंकि यह वही है जो पहली बार में करता है। बस लिखें:

mkdir -p /home/mlzboy/b2c2/shared/db;

और बस।


2
नोट: -pयदि आवश्यक हो तो ध्वज किसी भी मूल निर्देशिका को बनाता है।
दानियाल

13
मेरे भगवान, मुझे कभी पता नहीं चला कि "[" एक आज्ञा है। यह मेरी समस्याओं के बारे में बहुत कुछ बताता है ... आसानी से सबसे उपयोगी चीज जो मैंने कभी स्टैकऑवरफ्लो पर पढ़ी है।
बेन कुशीगियन

1
वाह! यह जानते हुए कि "[" बैश में एक आज्ञा है, ऐसा एक आंख खोलने वाला है। मुझे लगता है कि मेरी बैश स्क्रिप्ट के साथ बहुत सारे मुद्दे अब हल हो गए हैं!
रलुरु

93

वास्तव में यह जाँचने की आवश्यकता नहीं है कि यह मौजूद है या नहीं। चूँकि आप पहले से ही इसे बनाना चाहते हैं यदि यह मौजूद है, तो केवल mkdir करेगा

mkdir -p /home/mlzboy/b2c2/shared/db

2
नोट: -pयदि आवश्यक हो तो ध्वज किसी भी मूल निर्देशिका को बनाता है।
दानियाल

67

बस करो:

mkdir /path/to/your/potentially/existing/folder

यदि फ़ोल्डर पहले से मौजूद है, तो mkdir एक त्रुटि फेंक देगा। त्रुटियों को अनदेखा करने के लिए लिखें:

mkdir -p /path/to/your/potentially/existing/folder

कोई जाँच या ऐसा कुछ भी करने की आवश्यकता नहीं है।


सन्दर्भ के लिए:

-p, --parents no error if existing, make parent directories as needed http://man7.org/linux/man-pages/man1/mkdir.1.html


3
तर्क -pत्रुटियों को बिल्कुल नजरअंदाज नहीं करता है: यह एक अलग मोड को आमंत्रित करता है जहां कोई भी पथ घटक मौजूद नहीं है (और इसलिए यह एक त्रुटि नहीं है यदि ऐसा होता है कि शून्य को बनाने की आवश्यकता होती है)। व्यवहार भिन्न है क्योंकि यह पिछले एक के अलावा अन्य घटकों का निर्माण करेगा, जो वांछनीय हो सकता है या नहीं।
बीएनऑनरेप

23

आपको [और ]कोष्ठक के अंदर रिक्त स्थान चाहिए :

#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ] 
then
    mkdir -p /home/mlzboy/b2c2/shared/db
fi

18

स्वच्छ तरीके से, खोल तार्किक ऑपरेटरों के शॉर्टकट मूल्यांकन का फायदा उठाएं। ऑपरेटर के दाएं भाग को केवल तभी निष्पादित किया जाता है जब बाईं ओर का भाग सही होता है।

[ ! -d /home/mlzboy/b2c2/shared/db ] && mkdir -p /home/mlzboy/b2c2/shared/db

11
मिमी, क्लीनर नहीं: बस छोटा। यदि आप इसके पार आते हैं तो इस तरह के बयान का अर्थ समझना मुश्किल है।
डेविड ओरेजियो मोंटेर्सिनो

1
मुझे यह पसंद है, हालांकि -pतर्क चेक को अनावश्यक बनाता है। आप अभी भी इसका उपयोग कर सकते हैं जब आप उपयोग नहीं करना चाहते हैं -p, तो यह है कि जब आप नहीं चाहते हैं कि सभी मूल निर्देशिका स्वचालित रूप से बनाई जाए।
ADTC

3
वास्तव में यह लिखने के लिए भी छोटा है [ -d /path/to/dir ] || mkdir /path/to/dir.. दाईं ओर निष्पादित किया जाता है जब बाईं ओर झूठी होती है।
ADTC

4

मुझे लगता है कि आपको अपने कोड को थोड़ा प्रारूपित करना चाहिए:

#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
    mkdir -p /home/mlzboy/b2c2/shared/db;
fi;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.