mkdir -pබොහෝ නවීන මෙහෙයුම් පද්ධති සඳහා භාවිතා කිරීම සරල ක්රමයකි:
mkdir -p foo/bar/zoo/andsoforth
කෙසේ වෙතත්, mkdir -pබොහෝ අත්පොත් වල නිර්දේශ නොකරයි. ග්නූ සඳහා ලියකියවිලි කියවීම makeසහ autoconfභාවිතා කිරීමේ ගැටළු පිළිබඳව mkdir -p:
හරස් වේදිකා ස්ථාපනය සහ වින්යාස කිරීමේ පද්ධති සඳහා ඔවුන්ගේම ආරක්ෂිත විකල්ප ඇතmkdir -p .
ෂෙල් විධාන රේඛාවේ භාවිතා කිරීමට CMake:
cmake -E make_directory foo/bar/zoo/andsoforth
පෙර සැකසුම් සමඟ ස්ක්රිප්ටයේ භාවිතා කිරීමට Autoconf:
AS_MKDIR_P(foo/bar/zoo/andsoforth)
හෝ:
AC_PROG_MKDIR_P(foo/bar/zoo/andsoforth)
එහෙත්, මේ විසඳුම් ඉල්ලා cmakeහෝ autoconf( M4) මෙවලම් ස්ථාපනය කල යුතු (සහ හැකි preprocessing)
ඔබට විකල්පයක් 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ද යන්නයි.
seddirnameකේතයට පාදක කරගත් හරස් වේදිකා අනුවාදය එකතු කරන ලදි. එය සමාන ආකාරයකින් ක්රියා කරයි dirname(මාර්ගය සමඟ නිවැරදි කරන්න /, මූලික නම සහිත මාර්ග පමණක්, පසුපස ඇති මාර්ග/ මාර්ග, හා රහිතව ඇති මාර්ග \n). වත්මන් පෙදෙස සඳහා නව රේඛා හෝ අවලංගු අක්ෂර කිහිපයක් තිබේ නම් මෙම ශ්රිතයට නිවැරදිව ක්රියා කළ නොහැක. එය /( //, ///) හි ඕනෑම සංයෝජනයක් තනි ආදේශ කරයි/
රේඛාව වෙනස් කරන mkdir "$1" || return 1ලදිtest -d "$1" || { mkdir "$1" || return 1; } නිසා mkdirදෝෂය සමඟ අවසන් කිරීමක් මාර්ගය නම් පවතී මෙම පරික්ෂාව වැනි ඉදිකිරීම් අඩංගු මාර්ග සඳහා අවශ්ය වන්නේ aaa\.(නම් aaaනොපවතියි පෙර අනුවාදය නිර්මාණය aaaහා පසුව එය නැවත නිර්මාණය කිරීමට උත්සාහ).
මාර්ගය දැනටමත් තිබේ නම් mkd හි මෙම අනුවාදය දෝෂයක් ජනනය නොකරයි (නමුත් සමාන්තරව ක්රියාත්මක කිරීමේදී එවැනි දෝෂයක් ජනනය කිරීමේ හැකියාව තවමත් පවතී) සහ විධාන රේඛාවේ නාමාවලි කිහිපයක් ලබා ගත නොහැක.