පුනරාවර්තන mkdir


344

මා නොසලකා හරින ලිනක්ස් විධානයක් තිබේද: (ව්‍යාජ)

$ mkdir -R foo/bar/zoo/andsoforth

නැතහොත් එකවර නාමාවලි එකක් බවට පත් කිරීම හැර වෙනත් විකල්පයක් නැද්ද?



1
හාස්‍යජනකයි, මම එම පිටුව දෙස බලා සිටියෙමි, නමුත් "දෙමව්පියන්" මුළුමනින්ම නොසලකා හැරියේ ඔවුන් දරුවන් ලෙස (වමේ සිට දකුණට) සිතමින් සිටි බැවිනි.

18
වළක්වන්න: සමහර ෂෙල් වෙඩි වලදී ඔබට පවා කළ හැකිය mkdir -p foo/{bar,baz}/zoo/andsoforth. ඉතා ප්රයෝජනවත්!
ආරොන් කෝප්ලි

2
පුද්ගලිකව, මම මෑන් පිටුවේ "මවුපියන්" නොසලකා හැරියෙමි, මන්ද, ධජය "පුනරාවර්තන" සඳහා "-r" විය යුතු යැයි මට හැඟේ - නැතහොත් අවම වශයෙන්, අන්වර්ථයක් තිබිය යුතු බැවින් mkdir6 ක් පමණි ලේඛනගත කොඩි. අපාය, විධානය මඟින් පෙරනිමියෙන් පුනරාවර්තන ලෙස නාමාවලි නිර්මාණය කළ යුතු යැයි මට හැඟේ, ඔබට මෙය අවශ්‍ය නැතිනම් ඔබ එතරම් පැහැදිලිව සඳහන් කළ යුතුය.
jbowman

Answers:


580
$ mkdir -p foo/bar/zoo/andsoforth

100
FYI the -p යනු "දෙමාපියන්" යන්නයි
carl crott

18
ඔවුන්ට වෙනත් ඕනෑම විධානයක් මෙන් -r වෙනුවට සෑම ලිනක්ස් විධානයකටම නිශ්චිත පරාමිතීන් මතක තබා ගත නොහැක
වෙඩ්මන්ට්

2
නමුත් mkdir -pහරස් වේදිකාවක් නොවේ, සෑම
කවචයකම ක්‍රියා නොකරයි

10
@ РоманКоптев, mkdir -pඇත POSIX හි නිශ්චිතව දක්වා සම්පූර්ණයෙන්ම අතේ ගෙන යා හැකි වීම සමීපතම දෙයක් වන වන,. ෂෙල් පිටපතකින් ඔබ බලාපොරොත්තු වන්නේ කුමක්ද?
වයිල්ඩ්කාඩ්

6
Te ස්ටෙෆාන්බිජ්සිටර් ඔව්, මෙය unix.se මිස unixandwindows.se නොවේ. :)
EEAA

18

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 හි මෙම අනුවාදය දෝෂයක් ජනනය නොකරයි (නමුත් සමාන්තරව ක්‍රියාත්මක කිරීමේදී එවැනි දෝෂයක් ජනනය කිරීමේ හැකියාව තවමත් පවතී) සහ විධාන රේඛාවේ නාමාවලි කිහිපයක් ලබා ගත නොහැක.


4
"mkdir -p" යන්න පොසික්ස් මගින් අර්ථ දක්වා ඇත. කුමන යුනික්ස් හෝ යුනික්ස් වැනි ප්‍රභේද එයට සහාය නොදක්වයි? (මම එය විය නොහැකි කිසිදු හේතුවක් නැති බව අනුමාන නමුත් එය, ඉදි-ශෙලය විය යුතු නොවේ.) pubs.opengroup.org/onlinepubs/9699919799/utilities/mkdir.html
ටිම් බී

5
එම පිටුවේ ඇති සමහර තොරතුරු වයස අවුරුදු 15 ක් පමණි. සමහරු වයසින් වැඩි ය.
තෝමස් ඩිකී

7
විකල්පවල අවසානය සනිටුහන් කිරීම mkdir -pසඳහා printfඋපයෝගීතාවයක් හෝ සහායක් --ලබා ගැනීමට සහය නොදක්වන පද්ධති ඉතා පැරණි වනු ඇත (අපි අවම වශයෙන් දශක කිහිපයක්වත් පැරණි) .
ස්ටෙෆාන් චසෙලාස්

2
ඔබ cdirnameවැරදි පිළිතුරක් ලබා දෙනු ඇත foo/bar//, නැතහොත් නව රේඛා අක්ෂර අඩංගු නාමාවලි නම්, හෝ වත්මන් පෙදෙසෙහි වලංගු නොවන අක්ෂර.
ස්ටෙෆාන් චසෙලාස්

2
printfPOSIX පද්ධති වල ආරක්ෂිතයි. POSIX පද්ධති සහාය mkdir -p. mkdir -pPOSIX විසින් දශක ගණනාවක් තිස්සේ නියම කර ඇත. --80 දශකයේ මුල් භාගයේදී SysIII සමඟ ආරම්භ වන AT&T පද්ධතිවල පුළුල් ලෙස ව්‍යාප්ත වීමට පටන් ගත්තේය. printfපළමුවෙන්ම kshමා විශ්වාස කරන පරිදි ගොඩනඟන ලද අතර එය පසුව නියම කරන ලද්දේ POSIX mkdir -pවිසිනි. සමහර POSIX කවච (pdksh හෝ yash පදනම් කරගත්) තවමත් බිල්ඩින් නොමැත printf.
ස්ටෙෆාන් චසෙලාස්

0

-pවිධාන විකල්පය මඟින් අවශ්‍ය mkdirපරිදි p arent නාමාවලි සාදයි (පවතී නම් දෝෂයක් නොමැත):

mkdir -p foo/bar/zoo/andsoforth

තවත් ක්‍රමයක් නම්, උදාහරණයක් ලෙස භාවිතා කිරීම &&(නිශ්චිත ෆෝල්ඩරය තිබේ නම් දෝෂයකි):

mkdir foo && mkdir foo/bar && mkdir foo/bar/zoo && mkdir foo/bar/zoo/andsoforth

දම්වැල් ක්‍රියාකරු &&දාම භාවිතා කරනුයේ විධාන එකට සම්බන්ධ කිරීම සඳහා වන අතර, ඊළඟ විධානය ක්‍රියාත්මක වන්නේ පෙර විධානය දෝෂයකින් තොරව පිටව ගියහොත් පමණි.

ඇත්ත වශයෙන්ම, පළමු ක්රමය වඩා හොඳය.


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.