mkdir -p
বেশিরভাগ আধুনিক ওএসের জন্য ব্যবহার করা একটি সহজ উপায়:
mkdir -p foo/bar/zoo/andsoforth
তবে mkdir -p
অনেক ম্যানুয়ালগুলিতে সুপারিশ করা হয় না। GNU এর জন্য make
এবং autoconf
ব্যবহারে সমস্যাগুলি সম্পর্কে ডকুমেন্টেশন পড়ুন mkdir -p
:
ক্রস প্ল্যাটফর্ম ইনস্টলেশন ও কনফিগারেশন সিস্টেমগুলির নিজস্ব নিরাপদ বিকল্প রয়েছেmkdir -p
।
শেল কমান্ড লাইনে সিএমকে ব্যবহার করুন:
cmake -E make_directory foo/bar/zoo/andsoforth
প্রিপ্রোসেসিং সহ স্ক্রিপ্টে অটোকনফ ব্যবহার করতে:
AS_MKDIR_P(foo/bar/zoo/andsoforth)
বা:
AC_PROG_MKDIR_P(foo/bar/zoo/andsoforth)
তবে এই সমাধানগুলির জন্য cmake
বা autoconf
( M4
) সরঞ্জামগুলি ইনস্টল করা প্রয়োজন (এবং সম্ভাব্য প্রাকপ্রসেসিং)
আপনি বিকল্প install-sh
সহ স্ক্রিপ্টও ব্যবহার করতে পারেন -d
:
install-sh -d foo/bar/zoo/andsoforth
এই স্ক্রিপ্টটি ব্যবহার করে autoconf
এবং automake
প্রকল্প করে। আমি মনে করি এটি অবশ্যই নিরাপদ সমাধান হতে পারে।
সেই সময়ে আমি /bin/sh
নির্ভরশীলতা ছাড়াই স্ট্যান্ডার্ডের জন্য ক্রস প্ল্যাটফর্ম সমাধানটি অনুসন্ধান করেছিলাম , তবে একটিও পাইনি। তাই আমি পরবর্তী স্ক্রিপ্টটি লিখেছিলাম যা আদর্শ নাও হতে পারে তবে আমি মনে করি এটি বেশিরভাগ ক্রস প্ল্যাটফর্মের প্রয়োজনীয়তার সাথে সঙ্গতিপূর্ণ :
#! /bin/sh
cdirname() # cross platform alternative for 'dirname'
{
# $1 - path
test $# -eq 1 || { echo "Procedure 'cdirname' must have only one parameter. Scripting error."; exit 1; }
echo "$1" | sed -n -e '1p' | sed -e 's#//*#/#g' -e 's#\(.\)/$#\1#' -e 's#^[^/]*$#.#' -e 's#\(.\)/[^/]*$#\1#' -
}
mkd() # cross platform alternative for 'mkdir -p'
{
# $1 - directory to create
test $# -eq 1 || { echo "Function 'mkd' can create only one directory (with it's parent directories)."; exit 1; }
test -d "$1" && return 0
test -d "$(cdirname "$1")" || { mkd "$(cdirname "$1")" || return 1; }
test -d "$1" || { mkdir "$1" || return 1; }
return 0
}
এই স্ক্রিপ্টটি পুরাতন সিস্টেম, যেখানে বিকল্পের জন্য ব্যবহার করা যেতে পারে -p
জন্য mkdir
অনুপস্থিত।
sed
ভিত্তিক ক্রস প্ল্যাটফর্ম সংস্করণ কোড যুক্ত dirname
করা হয়েছে। এটি এর সাথে একইভাবে কাজ করে dirname
( /
পথের সাথে সঠিক , কেবলমাত্র নামের সাথে পাথ , ট্রেইলিং /
সহ পাথগুলি, চলার পথ ছাড়াই এবং ছাড়াই পাথ \n
)। যদি পথে নতুন লোকাল বা বর্তমান লোকেলের জন্য কিছু অবৈধ অক্ষর থাকে তবে এই ফাংশনটি সঠিকভাবে কাজ করতে পারে না। এটি /
( //
, ///
) এর যেকোন সংমিশ্রণের পরিবর্তে একক করে/
পরিবর্তিত লাইন mkdir "$1" || return 1
থেকে test -d "$1" || { mkdir "$1" || return 1; }
কারণ mkdir
ত্রুটি সহ বন্ধ করে পথ বিদ্যমান এবং এই চেক মত বাক্য ধারণকারী পাথ জন্য প্রয়োজন হয় aaa\.
(যদি aaa
পূর্ববর্তী সংস্করণ তৈরি করে বিদ্যমান নয় aaa
এবং তারপর আবার তৈরি করার চেষ্টা করে)।
এমকেডির এই সংস্করণটি যদি ইতিমধ্যে পথ উপস্থিত থাকে তবে ত্রুটি উত্পন্ন হয় না (তবে এটি সমান্তরাল সম্পাদনে এমন ত্রুটি তৈরি করার সম্ভাবনা রয়েছে) এবং কমান্ড লাইনে বেশ কয়েকটি ডিরেক্টরি পেতে পারে না।