اذهب إلى المحتوى

السؤال

نشر

لدي السكربت التالي والذي يقوم بنقل جميع الملفات من نوع .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 .

Recommended Posts

  • 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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...