كيفية mkdir فقط إذا كان دير غير موجود بالفعل؟
سؤال
أنا أكتب برنامج نصي شل ليتم تشغيله تحت 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 = - -
- (لا يوجد خطأ إذا كان موجودا، وجعل الدلائل الوالدين حسب الحاجة)