كيفية تنفيذ مهمة عند إضافة ملف جديد إلى دليل في Linux

سيوضح لك هذا البرنامج التعليمي كيفية استخدام أحداث نظام ملفات Linux (إعلام) ليتم إعلامك في كل مرة يظهر فيها ملف في دليل. يمكنك استخدام هذه المشغلات لأتمتة المهام الشائعة على نظامك.

سنقوم بكتابة نص برمجي يراقب الدليل ويعمل على الملفات الجديدة المضافة. يتم ضغط كل ملف بتنسيق gzip ونقله إلى دليل آخر بمجرد اكتشافه. يستخدم البرنامج النصي نظام inotify الفرعي ، من خلال أداة مساعدة تسمى أدوات inotify. لكن أولاً ، دعنا نثبت الأداة ونجربها.

تثبيت أدوات inotify و gzip

استخدم apt-get لتثبيت هذه الحزمة على نظامك إذا كنت تستخدم Ubuntu أو توزيعة أخرى قائمة على Debian. في توزيعات Linux الأخرى ، استخدم أداة إدارة الحزم الخاصة بتوزيع Linux بدلاً من ذلك.

sudo apt-get install inotify-tools gzip

تجربة أدوات التخمير

لنبدأ بمشاهدة دليل ومعرفة الأحداث التي تبدأ عند وصول ملفات جديدة. سنستخدم أداة تسمى inotifywatch ، وهي جزء من أدوات inotify. قم بإنشاء دليل جديد يسمى “وارد”:

mkdir incoming

ابدأ بمشاهدة هذا الدليل بتنفيذ الأمر التالي:

inotifywatch -v incoming

سيؤدي هذا إلى توجيه inotify لمشاهدة جميع أحداث نظام الملفات في الدليل “الوارد”. يجعل الخيار -v الأداة تطبع معلومات إضافية حول ما تفعله. لم نحدد خيار المهلة (-t) ، وسيستمر الأمر في جمع الأحداث حتى نخرج باستخدام CTRL + C. في هذه المرحلة ، يجب أن تبدو مطرافنا كما يلي:

  كيفية استخدام الأمر chgrp على نظام Linux

افتح نافذة طرفية جديدة (أو علامة تبويب) وقم بالتغيير إلى الدليل الوارد. استخدم الأمر touch لإنشاء ملف جديد باسم “newfile”.

cd incoming/
touch newfile

عد الآن إلى النافذة الطرفية الأولى وتوقف عن inotifywatch بالضغط على CTRL + C.

سيتم تقديم جدول أحداث إلى وحدة التحكم ، مما يشير إلى حالة واحدة من “إنشاء” و “فتح” و “سمة” و “إغلاق_الكتابة”. حدثت هذه الأحداث الأربعة عندما استخدمنا اللمس لإنشاء ملف جديد ، وتعيين سمات الوصول إلى الملفات الخاصة به ، وفتحه لكتابة حرف إنهاء فارغ ، ثم إغلاقه بعد ذلك. هذه ليست سوى عدد قليل من الأحداث العديدة التي يمكن مراقبتها على نظام ملفات باستخدام أدوات inotify. يمكنك رؤية القائمة الكاملة على الصفحة الرئيسية لـ inotifywatch.

لأغراضنا نحن مهتمون فقط بحدثين:

“إنشاء” – عندما يتم إنشاء ملف في الدليل الهدف.
“move_to” – عندما يتم نقل ملف من مكان آخر إلى الدليل الهدف.

دعنا نحاول inotifywatch مرة أخرى ، لكن هذه المرة نوجهها لمراقبة هذين الحدثين فقط. قم بتشغيل هذا الأمر في النافذة الطرفية الأولى:

inotifywatch -v -e create -e moved_to incoming

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

touch incoming/created
echo Testing123 >> incoming/created
touch /tmp/created2
mv /tmp/created2 incoming/

ارجع إلى النافذة الطرفية الأولى وأوقف inotifywatch بالضغط على CTRL + C. سنرى الناتج التالي:

  كيفية تثبيت JetBrains GoLand على نظام Linux

تم احتساب حدثين فقط: إنشاء ملف يسمى “created.txt” ونقل ملف موجود يسمى “created2.txt”. تم تجاهل أي شيء آخر ، مثل تعديل “created.txt”.

مشاهدة دليل وتنفيذ مهمة

الآن بعد أن عرفنا الأحداث التي يجب متابعتها ، يمكننا استخدام أداة أخرى تسمى inotifywait لمنع التنفيذ حتى يتم إنشاء ملف أو نقله إلى دليلنا الهدف. سنستخدم نفس الحجج التي استخدمناها مع inotifywatch ونحدد أيضًا كيف نريد تنسيق اسم الملف لاستخدامه في مهمتنا.

قبل أن نبدأ ، نحتاج إلى دليل يحتوي على الملفات التي تمت معالجتها بالفعل. قم بإنشاء دليل يسمى “تمت معالجته”:

mkdir processed

بعد ذلك ، قم بإنشاء نص برمجي جديد يسمى “watch-incoming.sh” وأضف المحتويات المدرجة أدناه:

#!/bin/bash

TARGET=~/incoming/
PROCESSED=~/processed/

inotifywait -m -e create -e moved_to --format "%f" $TARGET 
        | while read FILENAME
                do
                        echo Detected $FILENAME, moving and zipping
                        mv "$TARGET/$FILENAME" "$PROCESSED/$FILENAME"
                        gzip "$PROCESSED/$FILENAME"
                done

يقوم البرنامج النصي بتنفيذ الأمر inotifywait مع الخيار -m. هذا يجعل مراقب الأوامر يتغير إلى أجل غير مسمى. في كل مرة يتم الكشف عن حدث جديد ، يتم تمرير اسم الملف إلى الأمر read ويتم حقنه في المتغير “FILENAME”. يتم تنفيذ الكتلة الموجودة أسفل حلقة while ، حيث يتم نقل الملف أولاً إلى الدليل “المعالج” ثم يتم ضغطه بتنسيق gzip. يتم استبدال الملف الأصلي بالملف المضغوط ، وينتهي اسم الملف بـ “.gz”.

  كيفية تحويل مواقع الويب إلى تطبيقات Linux باستخدام كتالوج الويب

لنمنح أذونات التنفيذ على هذا البرنامج النصي وتشغيله من دليل المنزل.

chmod u+x watch-incoming.sh
./watch-incoming.sh

افتح نافذة المحطة الثانية وأنشئ ملفًا جديدًا في الدليل “الوارد”. ضع قائمة بمحتويات كل من الدليل “الوارد” و “المُعالج” لمشاهدة نتائج الحدث الذي يتم اكتشافه:

تم اكتشاف الملف النصي الأولي الذي قمنا بنسخه في الدليل “الوارد” بواسطة البرنامج النصي ، وتم نسخه إلى “معالج” ثم ضغطه باستخدام gzip.

يمكننا القيام ببعض المهام الشيقة الآن حيث يمكننا مراقبة وصول الملفات الجديدة إلى الدليل. على سبيل المثال ، يمكننا إضافة علامة مائية إلى ملفات الصور ، وضغط مقاطع الفيديو الأولية إلى تنسيق mp4 وحتى تحميل كل ملف جديد نراه على حاوية Amazon S3. يعد هذا البرنامج النصي نقطة انطلاق جيدة لبدء مهام سير العمل الخاصة بك وأتمتة المهام الشائعة على نظامك.