এমকিডির কীভাবে কেবল যদি একটি দির ইতিমধ্যে বিদ্যমান না থাকে?


1986

আমি এআইএক্সে কর্নশেল (ksh) এর অধীনে চালানোর জন্য একটি শেল স্ক্রিপ্ট লিখছি। আমি mkdirএকটি ডিরেক্টরি তৈরি করতে কমান্ডটি ব্যবহার করতে চাই । তবে ডিরেক্টরিটি ইতিমধ্যে বিদ্যমান থাকতে পারে, সেক্ষেত্রে আমি কিছু করতে চাই না। সুতরাং আমি ডিরেক্টরিটি বিদ্যমান নেই তা দেখতে পরীক্ষা করতে চাই বা বিদ্যমান ফাইলটি mkdirতৈরি করার চেষ্টা করার সময় "ফাইল বিদ্যমান" ত্রুটিটি দমন করে যা ছোঁড়ে।

এটি করার জন্য সর্বোত্তম কোনও চিন্তাভাবনা?

উত্তর:


3292

চেষ্টা করুন mkdir -p:

mkdir -p foo

নোট করুন যে এটি এমন কোনও মধ্যবর্তী ডিরেক্টরিও তৈরি করবে যা বিদ্যমান নেই; এই ক্ষেত্রে,

mkdir -p foo/bar/baz

ডিরেক্টরি তৈরি করবে foo, foo/barএবং foo/bar/bazযদি তারা কোন অস্তিত্ব নেই।

জিএনইউর মতো কিছু প্রয়োগে আরও বেশি পঠনযোগ্য ওরফে হিসাবে mkdirঅন্তর্ভুক্ত রয়েছে mkdir --parentsতবে এটি পসআইএক্স / একক ইউনিক্স স্পেসিফিকেশনে নির্দিষ্ট করা হয়নি এবং ম্যাকোস, বিভিন্ন বিএসডি এবং বিভিন্ন বাণিজ্যিক ইউনিক্সের মতো অনেকগুলি সাধারণ প্ল্যাটফর্মে উপলব্ধ নয়, তাই এটি এড়ানো উচিত।

যদি পিতামাত ডিরেক্টরি উপস্থিত না থাকে আপনি যদি ত্রুটি চান এবং ডিরেক্টরিটি উপস্থিত না থাকলে ডিরেক্টরি তৈরি করতে চান তবে আপনি testপ্রথমে ডিরেক্টরিটির অস্তিত্বের জন্য এটি করতে পারেন :

[ -d foo ] || mkdir foo

11
আপনার ব্যবহৃত সংক্ষিপ্ত উদাহরণটি হ'ল আপনার করা উচিত নয়। কোডিং স্পেস সংরক্ষণ করার জন্য এটি যুক্তিটিকে বিপরীত করছে তবে এটি ব্যবহার করা উচিত! এবং&& এবং যারা এটি পড়ছেন তাদের আরও জ্ঞাত করে তোলেন।
মাইক কিউ

16
@ আন্ড্রেস লারসেন এই প্রশ্নটি mkdirউইন্ডোজে নয়, ইউনিক্সের মতো সিস্টেমগুলির বিষয়ে। -pপসিক্স / একক ইউনিক্স স্পেসিফিকেশন সম্মতির জন্য প্রয়োজনীয়, সুতরাং এই স্পেসিফিকেশনগুলি মেনে চলার উদ্দেশ্যে যে কোনও কিছু সমর্থন করবে -p। আপনি সাইগউইন বা এমএসওয়াইএসের মতো কোনও পসিক্স এমুলেশন স্তর ব্যবহার না করে উইন্ডোজ সম্পূর্ণ আলাদা।
ব্রায়ান ক্যাম্পবেল

22
আমি আজ আকর্ষণীয় কিছু আবিষ্কার করেছি mkdir -p, আপনি বন্ধনী ব্যবহার করতে পারেন! {}কমান্ডে "জটিল" ডিরেক্টরি ট্রি তৈরি করতে। এখানে দেখুন: টেকনোসোফোস.com
04/

12
@ মাইকিকিউ এর ||পরিবর্তে আমি পছন্দ করি &&কারণ পুরো লাইনে সঠিক প্রস্থান স্থিতি রয়েছে। যদি আপনার শেলটি চলতে থাকে errexitবা যদি কোনও ফাংশনে যদি সেই লাইনটি শেষ হয় তবে স্যুইচ-কেস যাই হোক না কেন।
রুডিমিয়ার

9
@ এর সাথে কিছু করার নেই mkdir; শেলটি এই জাতীয় বহিঃপ্রকাশকে আর্গুমেন্টের বিযুক্ত তালিকায় প্রসারিত করে mkdir
চ্যানার

176

এই কাজ করা উচিত:

$ 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

ডিরেক্টরিটি উপস্থিত না থাকলে ডিরেক্টরি তৈরি করবে তবে আপনি যে ডিরেক্টরিটি তৈরি করার চেষ্টা করছেন তার নামটি ডিরেক্টরি ছাড়া অন্য কোনও কিছুর দ্বারা ইতিমধ্যে ব্যবহার করা হচ্ছে কিনা তা আপনাকে সতর্ক করে দেয়।


আমি মনে করি না কর্নে একটি -d অপারেটর রয়েছে, বরং ফাইল / ডিরেক্টরি উভয়ের জন্যই ব্যবহৃত হয় এবং কেবল অস্তিত্ব পরীক্ষা করে cks এছাড়াও, তারা সবাই 0 সাফল্যের সাথে প্রত্যাবর্তন করে, তাই! অপ্রয়োজনীয়। আমি ভুল হলে শুধরে.
আলকার

1
দু'পক্ষেই ভুল, আফাইক পরীক্ষাগুলি সাফল্যে সত্য প্রত্যাবর্তন করে, এবং -ডি খুব উপস্থিত (কমপক্ষে ম্যাকোস এক্স-এ)
অ্যালনিটাক

5
এটি উল্লেখযোগ্য হতে পারে যে এটি বেশ থ্রেড-নিরাপদ নয়। ডিরেক্টরি উপস্থিত রয়েছে কিনা তা পরীক্ষা করার সময় এবং আপনি লেখার চেষ্টা করার সময়গুলির মধ্যে জিনিসগুলি পরিবর্তিত হতে পারে।
জাস্টিন এল


73

একটি কমান্ড দিয়ে জটিল ডিরেক্টরি গাছ সংজ্ঞা দেওয়া

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

কোনও ত্রুটি থাকলে উপস্থিত নেই, প্রয়োজন অনুযায়ী
পিতামহুল

18
মনে রাখবেন যে এটি mkdirনিজের বৈশিষ্ট্য নয়, শেলটি আদেশটি কার্যকর করে। একে ব্রেস এক্সপেনশন বলা হয় - এএফআইএকে, কেবল বাশ, কেএসএস, জেডএস এবং সি শেল এটি সমর্থন করে।
ড্যানিয়েল কামিল কোজার

3
কমাতে আপনার যদি ফাঁকা জায়গা থাকে তবে আপনি (অপ্রত্যাশিত) ফলাফল পেতে পারেন। সতর্ক থাকুন।
আটলাস 7

1
@ অ্যাটলাস stated বলেছে, আপনার সাধারণত এমন রেজেক্সের অংশ থাকা চরিত্রগুলি থেকে বাঁচতে হবে। (অর্থাত্ ব্যবহারের পরিবর্তে folder nameআপনার ব্যবহারের প্রয়োজন folder\ name)
জন হ্যামিল্টন

1
এটি কোনও উত্তর নয়; এটি একটি পৃথক বিষয় যা মন্তব্য হিসাবে আরও উপযুক্ত হবে।
ক্রিস পেজ

40

আপনি যদি কোনও ত্রুটি বার্তা প্রদর্শন করতে না চান:

[ -d newdir ] || mkdir newdir

আপনি যদি নিজের ত্রুটি বার্তাটি প্রদর্শন করতে চান:

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

20

পুরানো চেষ্টা এবং সত্য

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

অন্যান্য সলিউশনগুলির অনেকের কাছে রেসের শর্তগুলির সাথে আপনি যা চান তা করবে।

কখনও কখনও সহজ (এবং ugliest) সমাধান সেরা হয়।


5
"Tmp" উপস্থিত না থাকলে এটি ব্যর্থ হবে। বা এটি আপনাকে কোনও নিশ্চয়তা দেয় না।
মাইক কিউ

15

mkdir fooডিরেক্টরি বিদ্যমান থাকলেও কাজ করে। "Foo" নামের ডিরেক্টরিটি উপস্থিত না থাকলে কেবল এটিকে কাজ করতে -pপতাকাটি ব্যবহার করে চেষ্টা করুন ।

উদাহরণ: -

mkdir -p foo

এটি "foo" নামের ডিরেক্টরিটি তৈরি করবে কেবলমাত্র যদি এটি বিদ্যমান না থাকে। :)


2
@ ব্রায়ান ক্যাম্পবেল দ্বারা উল্লিখিত হিসাবে এটি পাথের অন্য কোনও ডিরেক্টরিও তৈরি করবে। এটি বিপজ্জনক হতে পারে যদি উদাহরণস্বরূপ একটি ভলিউম আনমাউন্ট হয়ে যায়, কারণ এটি মাউন্ট পয়েন্টে ডিরেক্টরি তৈরি করতে পারে।
uliwitness


10

বা আপনি যদি অস্তিত্বের জন্য আগে পরীক্ষা করতে চান:

if [[ ! -e /path/to/newdir ]]; then
            mkdir /path/to/newdir
fi

-e Korn শেল জন্য থাকবেই পরীক্ষা।

আপনি একটি কর্ন শেল ম্যানুয়ালও গুগল করার চেষ্টা করতে পারেন।


10

mkdir উইন্ডোজ 8+ সিস্টেমে আর -p সুইচ সমর্থন করে না।

আপনি এটি ব্যবহার করতে পারেন:

IF NOT EXIST dir_name MKDIR dir_name

10
ওপি এআইএনএক্স কর্নশেল সম্পর্কে ছিল ... উইন্ডোজের সাথে কিছুই করার নেই, তাই না?
জে ছোমেল

9

man mkdirবিকল্পের জন্য ম্যান পৃষ্ঠা উল্লেখ করে -p

   -p, --parents
          no error if existing, make parent directories as needed

যা প্রদত্ত পথে সমস্ত ডিরেক্টরি তৈরি করবে, যদি উপস্থিত থাকে তবে কোনও ত্রুটি না ফেলে অন্যথায় এটি প্রদত্ত পথে বাম থেকে ডানে সমস্ত ডিরেক্টরি তৈরি করে। নীচের আদেশটি চেষ্টা করুন। ডিরেক্টরি newdirএবং anotherdirএই কমান্ড জারি করার আগে উপস্থিত নেই

সঠিক ব্যবহার

mkdir -p /tmp/newdir/anotherdir

কমান্ডটি কার্যকর করার পরে আপনি / tmp এর অধীনে দেখতে newdirএবং anotherdirতৈরি করতে পারেন । আপনি যতবার চান এই কমান্ডটি জারি করতে পারেন, কমান্ডটি সর্বদা থাকে exit(0)। এই কারণে বেশিরভাগ লোকেরা প্রকৃত পাথগুলি ব্যবহার করার আগে শেল স্ক্রিপ্টগুলিতে এই কমান্ডটি ব্যবহার করে।


8

ডিরেক্টরিটি তৈরির তুলনায় এটি উপস্থিত না থাকলে ডিরেক্টরিটি রয়েছে কিনা তা পরীক্ষা করতে আপনি লুপটি ব্যবহার করতে পারেন।

1) দির = / বাড়ি / দির_নাম

if [ ! -d $dir ]
then
     mkdir $dir
else
     echo "Directory exists"  
fi

2) আপনি ডিরেক্টরি তৈরি করতে ডিরেক্টরিতে mkdir -p বিকল্প ব্যবহার করতে পারেন। ডিরেক্টরিটি এটি উপলভ্য নয় কিনা তা যাচাই করবে।

mkdir -p $dir

mkdir -p ডিরেক্টরিতে গাছের কাঠামো তৈরি করতে দেয়। আপনি যদি একই কমান্ডটি ব্যবহার করে পিতামাতার এবং শিশুদের ডিরেক্টরি তৈরি করতে চান তবে mkdir -p বেছে নিতে পারেন

mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2

লুপ যদি ব্যবহার করে কোন লাভ আছে !? কেউ কেন ওভার-পি বিকল্পটি বেছে নেবে ?!
পেডরাম বাশির

1
যখন কোনও ফোল্ডার উপস্থিত না থাকে তখন আমি ফোল্ডারগুলি তৈরির উপায়গুলি আপনাকে ভাগ করে নিয়েছি। এটি একের প্রয়োজনের উপর নির্ভর করে। আপনার যদি এমন কোনও ব্যবহারের ক্ষেত্রে থাকে যেখানে আপনার ফোল্ডারটি উপস্থিত নেই কিনা তা পরীক্ষা করে দেখতে হবে এবং আপনি এটির ট্র্যাক রাখতে চান যাতে আপনি সমাধানটি 1 নিয়ে যেতে পারেন তবে যদি এটি সমাধান না করে তবে আপনি সমাধান 2 দিয়ে যেতে পারেন, এটি ফোল্ডারটি তৈরি করবে যদি না থাকে।
অভিনব বৈদ্য 8

আমি একটি লুপ দেখতে পাইনি।
অমিত নাইডু

3

এটি একটি সাধারণ ফাংশন (বাশ শেল) যা আপনাকে ডিরেক্টরি তৈরি করতে দেয় যদি এটি উপস্থিত না থাকে।

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

আপনি উপরের ফাংশনটি হিসাবে কল করতে পারেন:

ডিরেক্ট ডিরেক্টরি / tmp / fooDir / বারডির

উপরোক্তগুলি fooDir এবং বারডির তৈরি করে যদি তাদের অস্তিত্ব না থাকে। Mkdir কমান্ডের "-p" বিকল্পটি নোট করুন যা ডিরেক্টরিগুলি পুনরাবৃত্তভাবে তৈরি করে। আশাকরি এটা সাহায্য করবে.


2
mkdir -p sam
  • mkdir = ডিরেক্টরি তৈরি করুন
  • -পি = - প্যারেন্টস
  • (বিদ্যমান থাকলে কোনও ত্রুটি নেই, প্রয়োজন অনুযায়ী পিতামহুল ডিরেক্টরি তৈরি করুন)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.