shell Mkdir कैसे करें अगर एक डीआईआर पहले से मौजूद नहीं है?




scripting ksh (10)

पुरानी कोशिश की और सच

mkdir /tmp/qq >/dev/null 2>&1

जो कुछ भी आप चाहते हैं वह करेंगे जो किसी अन्य दौड़ समाधान के साथ नहीं है।

कभी-कभी सबसे सरल (और सबसे उदार) समाधान सबसे अच्छे होते हैं।

मैं AIX पर कॉर्नशेल (ksh) के तहत चलाने के लिए एक शेल स्क्रिप्ट लिख रहा हूं। मैं निर्देशिका बनाने के लिए mkdir कमांड का उपयोग करना चाहता हूं। लेकिन निर्देशिका पहले से मौजूद हो सकती है, इस मामले में मैं कुछ भी नहीं करना चाहता हूं। इसलिए मैं यह देखने के लिए परीक्षण करना चाहता हूं कि निर्देशिका मौजूद नहीं है, या "फ़ाइल मौजूद है" त्रुटि mkdir जो mkdir फेंकता है जब यह मौजूदा निर्देशिका बनाने का प्रयास करता है।

इस पर कोई विचार कैसे करें?


mkdir -p प्रयास करें:

mkdir -p foo

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

mkdir -p foo/bar/baz

अगर वे मौजूद नहीं हैं तो निर्देशिका foo , foo/bar , और foo/bar/baz निर्देशिका बनाएंगे।

यदि आप एक त्रुटि चाहते हैं जब मूल निर्देशिका मौजूद नहीं है, और यदि निर्देशिका मौजूद नहीं है, तो निर्देशिका बनाना चाहते हैं, तो आप पहले निर्देशिका के अस्तित्व के लिए test कर सकते हैं:

[ -d foo ] || mkdir foo

यह एक साधारण फ़ंक्शन (बैश खोल) है जो आपको निर्देशिका बनाने देता है यदि यह अस्तित्व में नहीं है।

#----------------------------------
# Create a directory if it doesn't exist
#------------------------------------
createDirectory() {
    if [ ! -d $1 ]
        then
        mkdir -p $1
    fi
}

आप उपरोक्त फ़ंक्शन को इस प्रकार कॉल कर सकते हैं:

createDirectory / tmp / fooDir / BarDir

उपरोक्त फूडीर और बारदीर बनाता है अगर वे मौजूद नहीं हैं। Mkdir कमांड में "-p" विकल्प पर ध्यान दें जो निर्देशिका को दोबारा बनाता है। उम्मीद है की यह मदद करेगा।


यदि आप कोई त्रुटि संदेश नहीं दिखाना चाहते हैं:

[ -d newdir ] || mkdir newdir

यदि आप अपना स्वयं का त्रुटि संदेश दिखाना चाहते हैं:

[ -d newdir ] && echo "Directory Exists" || mkdir newdir

एक कमांड के साथ जटिल निर्देशिका पेड़ परिभाषित करना

mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

-पी ध्वज का प्रयोग करें।

man mkdir
mkdir -p foo

mkdir समर्थन नहीं करता है -p विंडोज 8+ सिस्टम पर अब स्विच करें।

आप इसका उपयोग कर सकते हैं:

IF NOT EXIST dir_name MKDIR dir_name

mkdir foo निर्देशिका मौजूद होने पर भी काम करता है। इसे केवल तभी काम करने के लिए यदि "foo" नामक निर्देशिका मौजूद नहीं है, तो -p ध्वज का उपयोग करने का प्रयास करें।

उदाहरण :-

mkdir -p foo

यह केवल "foo" नाम की निर्देशिका बनाएगा यदि यह अस्तित्व में नहीं है। :)


यह काम करना चाहिए:

$ mkdir -p dir

या:

if [[ ! -e $dir ]]; then
    mkdir $dir
elif [[ ! -d $dir ]]; then
    echo "$dir already exists but is not a directory" 1>&2
fi

जो निर्देशिका बनायेगा यदि यह अस्तित्व में नहीं है, लेकिन आपको चेतावनी देता है कि निर्देशिका का नाम जिसे आप बनाने का प्रयास कर रहे हैं, पहले से ही निर्देशिका के अलावा किसी अन्य चीज़ द्वारा उपयोग में है।


mkdir -p sam
  • mkdir = निर्देशिका बनाओ
  • -पी = - माता-पिता
  • (मौजूदा होने पर कोई त्रुटि नहीं, आवश्यकतानुसार मूल निर्देशिका बनाएं)




mkdir