سؤال

أنا أكتب برنامج نصي شل ليتم تشغيله تحت Kornshell (KSH) على AIX. أود استخدام mkdir أمر لإنشاء دليل. لكن الدليل قد يكون موجودا بالفعل، وفي هذه الحالة لا أريد أن أفعل أي شيء. لذلك أريد إما اختبار لمعرفة أن الدليل غير موجود، أو قمع خطأ "الملف" خطأ ذلك mkdir يلقي عندما يحاول إنشاء دليل موجود.

أي أفكار حول أفضل السبل للقيام بذلك؟

هل كانت مفيدة؟

المحلول

يحاول mkdir -p:

mkdir -p foo

لاحظ أن هذا سيخلق أيضا أي دلائل وسيطة غير موجودة؛ على سبيل المثال،

mkdir -p foo/bar/baz

سوف تخلق الدلائل foo, foo/bar, ، و foo/bar/baz إذا لم تكن موجودة.

بعض التنفيذ مثل جنو mkdir تتضمن mkdir --parents كاستثمار أكثر قابلية للقراءة، ولكن لم يتم تحديد هذا في مواصفات Posix / UNIX واحدة وغير متوفرة على العديد من المنصات الشائعة مثل ماكوس، ومختلف BSDs، ومختلف Unixes التجاري، لذلك يجب تجنبها.

إذا كنت تريد خطأ عند عدم وجود أدلة الأم، وتريد إنشاء الدليل إذا لم يكن موجودا، فيمكنك ذلك test لوجود الدليل أولا:

[ -d foo ] || mkdir 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

مما سيخلق الدليل إذا لم يكن موجودا، ولكنه يحذر منك إذا كان اسم الدليل الذي تحاول إنشاءه قيد الاستخدام بالفعل من قبل شيء آخر غير الدليل.

استخدم علامة -p.

man mkdir
mkdir -p foo

تحديد أشجار الدليل المعقدة مع أمر واحد

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

إذا كنت لا ترغب في إظهار أي رسالة خطأ:

[ -d newdir ] || mkdir newdir

إذا كنت ترغب في إظهار رسالة الخطأ الخاصة بك:

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

حاول القديم والصحيح

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

سوف تفعل ما تريد مع أي من ظروف السباق العديد من الحلول الأخرى لديها.

في بعض الأحيان تكون الحلول أبسط (وأوعما) هي الأفضل.

mkdir foo يعمل حتى إذا كان الدليل موجود. لجعلها تعمل فقط إذا كان الدليل المسمى "foo" غير موجود، فحاول استخدام -p علم.

مثال :-

mkdir -p foo

سيؤدي ذلك إلى إنشاء الدليل المسمى "Foo" فقط إذا لم يكن موجودا. :)

directory_name = "foo"

if [ -d $directory_name ]
then
    echo "Directory already exists"
else
    mkdir $directory_name
fi

أو إذا كنت ترغب في التحقق من وجود أولا:

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

أی هو الاختبار الموجود لشل كورن.

يمكنك أيضا تجربة Googling دليل قذيفة Korn.

MKDIR لا يدعم -P التبديل بعد الآن على أنظمة Windows 8+.

يمكنك استخدام هذا:

IF NOT EXIST dir_name MKDIR dir_name

يمكنك إما استخدامها إذا كان الحلقة للتحقق مما إذا كان هناك دليل موجود أم لا، إذا لم يخرج من إنشاء الدليل.

1) dir = / home / dire_name

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

هذه هي وظيفة بسيطة (شل باش) والتي تتيح لك إنشاء دليل إذا لم يكن موجودا.

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

يمكنك استدعاء الوظيفة أعلاه كما هو:

Createirectory / TMP / FOODIR / BARDIR

ما سبق يخلق عشاق وبردير إذا لم تكن موجودة. ملاحظة خيار "-p" في أمر mkdir الذي يخلق دلائل متكررة. أتمنى أن يساعدك هذا.

في اشارة الى صفحة الرجل man mkdir للحصول على الخيار -p

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

مما سيخلق جميع الدلائل في مسار معين، إذا كان موجودا يلقي أي خطأ وإلا فإنه يخلق جميع الأدلة من اليسار إلى اليمين في المسار المحدد. جرب الأمر أدناه. الدلائل newdir و anotherdir لا يوجد قبل إصدار هذا الأمر

الاستخدام الصحيح

mkdir -p /tmp/newdir/anotherdir

بعد تنفيذ الأمر الذي يمكنك رؤيته newdir و anotherdir تم إنشاؤها تحت / TMP. يمكنك إصدار هذا الأمر عدة مرات تريده، يكون الأمر دائما exit(0). وبعد نظرا لهذا السبب يستخدم معظم الأشخاص هذا الأمر في البرامج النصية SHELL قبل استخدام هذه المسارات الفعلية.

mkdir -p sam
  • mkdir = اصنع الدليل
  • -p = - -
  • (لا يوجد خطأ إذا كان موجودا، وجعل الدلائل الوالدين حسب الحاجة)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top