• 0

كيف أعدل السكربت ليعمل على المجلدات الفرعية ؟

لدي السكربت التالي والذي يقوم بنقل جميع الملفات من نوع .txt إلى مجلد آخر:

 #!/bin/bash

 MY_DIR=/tmp/swan

 cd $MY_DIR

 find .  -path "*work*"  -iname "*.txt" -type f -execdir mv '{}' /tmp/swan/test/done \;

أريد أن أعدل على السكربت حتى ينقل جميع ملفات .txt في المجلدات الفرعية أيضا وليس فقط المجلد الرئيسي، فلو كان المجلد هو /tmp/swan فسيقوم بنقل الملفات الموجودة في المجلدات الفرعية مثلا /tmp/swan/text و /tmp/swan/text/new .

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

إذا افترضنا أن الأسماء لا تحتوي على أية رموز غريبة ولا توجد أية مشاكل أخرى فيمكنك في هذه الحالة أن تقوم بحلقة تكرار for لمتغير  ما (مثلا w) على */work كما في المثال التالي:

MY_DIR=/tmp/swan

cd $MY_DIR

for w in */work
do
  find $w -path "*work*"  -iname "*.txt" -type f -execdir mv '{}' $MY_DIR/$w/completed \;
done

قمت بتجربة هذا المثال وقد عمل على الملفات في المستوى الرابع.
هنالك حل آخر والذي يستخدم حلقة التكرار while للتكرار على جميع الملفات الموجودة في المجلد الرئيسي بالإضافة إلى مجلداته الفرعية.
مثال الحل الآخر باستخدام while:

MY_DIR=/tmp/swan

cd $MY_DIR

find $MY_DIR -type d -name \*work\* -print | while read w
do
  find $w -path "*work*"  -iname "*.txt" -type f -execdir mv '{}' $MY_DIR/$w/completed \;
done

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن