الدليل الشامل لأمر find في لينكس

نظرة عامة

يُعد العثور السريع على الملفات ومعالجتها في بيئة لينكس مهارة أساسية وضرورية لإدارة الخوادم والتطوير البرمجي. في هذا المقال، سنتعرف خطوة بخطوة من خلال التطبيق العملي على خيارات البحث الأساسية لأمر find، والبحث المستند إلى حجم الملف ووقت التعديل، بالإضافة إلى تنفيذ العمليات المجمعة (-exec) على نتائج البحث.

إعداد بيئة التطبيق العملي والبحث الأساسي بالاسم

لإنشاء دليل مخصص لتطبيق أمر find والانتقال إليه، نقوم بتنفيذ الأمر mkdir -p ~/find_lab/docs ~/find_lab/logs ~/find_lab/backup && cd ~/find_lab.

mkdir -p ~/find_lab/docs ~/find_lab/logs ~/find_lab/backup && cd ~/find_lab

لإنشاء ملفات تجريبية متنوعة الامتدادات لاستخدامها في اختبارات البحث، نقوم بتنفيذ الأمر touch docs/app.log docs/guide.txt logs/error.log logs/access.log backup/data.bak.

touch docs/app.log docs/guide.txt logs/error.log logs/access.log backup/data.bak

يبحث الأمر find بشكل تكراري (recursive) عن جميع الملفات والأدلة تحت مسار الدليل المحدد وفقاً للشروط المحددة.
عند تنفيذ الأمر find . -name "*.log"، يتم البحث عن جميع الملفات التي تنتهي بالامتداد .log انطلاقاً من الدليل الحالي (.) وطباعتها مع مساراتها.
في هذه الأثناء، ولمنع الصدفة (shell) من توسيع حرف البدل (*) مسبقاً، يتم وضع نمط البحث داخل علامات اقتباس مزدوجة.
⚙️ [الخيارات الرئيسية]

-name : يبحث عن العناصر المطابقة لاسم الملف أو النمط المحدد مع مراعاة حالة الأحرف (حساس لحالة الأحرف).
-iname : يبحث عن العناصر المطابقة لاسم الملف أو النمط المحدد بدون مراعاة حالة الأحرف (غير حساس لحالة الأحرف).
-type : يحدد نوع الملف المراد البحث عنه (f للملفات العادية، و d للأدلة).
-size : يبحث بناءً على حجم الملف (+ لأكبر من، و - لأقل من).
-mtime : يبحث بناءً على وقت تعديل محتوى الملف (بوحدة الأيام).
-empty : يبحث عن الملفات الفارغة أو الأدلة الفارغة.
-exec : ينفذ أمر لينكس محدد بشكل مجمع على كل ملف يتم العثور عليه.
-delete : يحذف الملفات المطابقة لشروط البحث على الفور.

find . -name “*.log”

للبحث عن اسم ملف دون مراعاة حالة الأحرف، نستخدم الخيار -iname وننفذ الأمر find . -iname "GUIDE.TXT".
حتى وإن كان اسم الملف الفعلي بأحرف صغيرة guide.txt، فإنه يتطابق مع شرط البحث بالأحرف الكبيرة ويتم عرض مسار الملف بنجاح.

find . -iname “GUIDE.TXT”

البحث عن الملفات الكبيرة حسب النوع والحجم

لاختبار البحث بناءً على حجم الملف، نقوم بتنفيذ الأمر truncate -s 15M ~/find_lab/backup/large_archive.iso لإنشاء ملف تجريبي كبير بحجم 15 ميجابايت.

truncate -s 15M ~/find_lab/backup/large_archive.iso

لمزيد من التدريب على مقارنة الأحجام، نقوم بتنفيذ الأمر truncate -s 2M ~/find_lab/logs/big_trace.log لإنشاء ملف سجل تجريبي بحجم 2 ميجابايت.

truncate -s 2M ~/find_lab/logs/big_trace.log

لتصفية مسارات الأدلة فقط واستبعاد الملفات العادية، نقوم بتنفيذ الأمر find ~/find_lab -type d باستخدام الخيار -type d.
تُعرض قائمة بجميع الأدلة الموجودة تحت المسار المحدد فقط بشكل منظم.

find ~/find_lab -type d

للبحث عن الملفات العادية (-type f) التي يتجاوز حجمها 10 ميجابايت (-size +10M) والتحقق من تفاصيلها في آنٍ واحد، نقوم بتنفيذ الأمر find ~/find_lab -type f -size +10M -exec ls -lh {} +.
يتم العثور على ملف large_archive.iso المطابق للشرط بحجم 15 ميجابايت، ويُطبع مع معلومات الأذونات والحجم بالتفصيل.

find ~/find_lab -type f -size +10M -exec ls -lh {} +

البحث عن الملفات المعدلة بناءً على شرط الوقت (mtime/mmin)

للتدريب على البحث عن الملفات حسب الوقت المنقضي، نقوم بتنفيذ الأمر touch -d "2 days ago" ~/find_lab/backup/old_backup.tar لإنشاء ملف تجريبي تم تعديله قبل يومين.

touch -d “2 days ago” ~/find_lab/backup/old_backup.tar

لاختبار البحث عن أحدث الملفات المعدلة، نقوم بتنفيذ الأمر touch ~/find_lab/logs/recent.log لإنشاء ملف تجريبي يحمل الطابع الزمني للوقت الحالي.

touch ~/find_lab/logs/recent.log

للبحث عن الملفات العادية التي تم تعديلها خلال آخر 24 ساعة، نقوم بتنفيذ الأمر find ~/find_lab -type f -mtime -1 مع تطبيق الخيار -mtime -1.
تُعرض قائمة بجميع الملفات التي تم إنشاؤها أو تعديلها خلال الوقت المحدد (24 ساعة) بنجاح.

find ~/find_lab -type f -mtime -1

للبحث عن الملفات القديمة التي مضى على تعديلها أكثر من 24 ساعة (يوم واحد)، نقوم بتنفيذ الأمر find ~/find_lab -type f -mtime +1 باستخدام الخيار -mtime +1.
يتم تصفية وعرض ملف old_backup.tar الذي تم إنشاؤه بتاريخ يسبق يومين فقط وبشكل دقيق.

find ~/find_lab -type f -mtime +1

التحكم المجمع في نتائج البحث: خيار -exec وعمليات الحذف

للتدريب على التحكم المجمع وتغيير الأذونات، نقوم بتنفيذ الأمر mkdir -p ~/find_lab/temp && touch ~/find_lab/temp/cache1.tmp ~/find_lab/temp/cache2.tmp لإنشاء دليل مؤقت وملفات مؤقتة بداخله.

mkdir -p ~/find_lab/temp && touch ~/find_lab/temp/cache1.tmp ~/find_lab/temp/cache2.tmp

لتغيير أذونات الوصول لجميع الملفات التي تحمل الامتداد .tmp دفعة واحدة إلى 644، نطبق الخيار -exec وننفذ الأمر find ~/find_lab/temp -name "*.tmp" -exec chmod 644 {} \;.
يتم استبدال الرمز {} بمسار كل ملف يتم العثور عليه، بينما يشير \; إلى نهاية الأمر الممرر إلى صيغة -exec.

find ~/find_lab/temp -name “*.tmp” -exec chmod 644 {} ;

للتحقق من تطبيق تغيير الأذونات بشكل صحيح، نقوم بتنفيذ الأمر ls -l ~/find_lab/temp.
تُظهر النتيجة أنه قد تم تعديل كلا الملفين المؤقتين ليصبحا بأذونات القراءة والكتابة (-rw-r--r--، 644).

ls -l ~/find_lab/temp

لحذف الملفات التي تطابق الامتداد .tmp دفعة واحدة، نقوم بالربط مع الأمر rm -f وتنفيذ find ~/find_lab/temp -name "*.tmp" -exec rm -f {} \;.
تتم إزالة الملفات المستهدفة دفعة واحدة دون الحاجة إلى خطوات تأكيد إضافية.

find ~/find_lab/temp -name “*.tmp” -exec rm -f {} ;

للتحقق النهائي من حذف جميع الملفات المؤقتة بنجاح، نقوم بتنفيذ الأمر ls -la ~/find_lab/temp.
يتبين بقاء الدليل الحالي (.) والدليل الأب (..) فقط، وحذف جميع الملفات المؤقتة التي تم إنشاؤها بالكامل.

ls -la ~/find_lab/temp

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