Find Command

1) ما هو أمر find ولماذا نستخدمه؟

أمر find يستخدم للبحث عن ملفات ومجلدات داخل مسار معيّن بناءً على شروط مثل:

  • الاسم (name)
  • النوع (ملف/مجلد/رابط)
  • الحجم (size)
  • التاريخ (mtime/atime)
  • الصلاحيات (perm)
  • المالك (user/group)

متى يفيدك؟

  • عندما تضيع منك ملفات داخل مشروع كبير
  • البحث عن ملفات كبيرة تستهلك مساحة
  • حذف ملفات مؤقتة مثل .tmp
  • تنفيذ أمر على كل الملفات المطابقة (نسخ/نقل/ضغط…)
2) الصيغة العامة (Syntax)
find [PATH] [EXPRESSION]
Bash
  • PATH: أين تبحث؟ (مثل . أو ~/project أو /var/log)
  • EXPRESSION: الشروط (مثل -name, -type, -size…)

إذا لم تكتب PATH → يستخدم المجلد الحالي.

3) مثال تجهيز بيئة تدريب (اختياري لكن مفيد)
cd ~/project
mkdir -p find_demo/dir1 find_demo/dir2
touch find_demo/file1.txt find_demo/file2.log
touch find_demo/dir1/note.txt find_demo/dir2/temp.tmp
ln -s find_demo/file1.txt find_demo/link_to_file1
Bash
4) أساسيات find
أ) عرض كل شيء داخل المجلد الحالي (قد يكون كثير)
find .
Bash
ب) البحث باسم ملف محدد: -name
find . -name "file1.txt"
Bash
ج) البحث بنمط (wildcard)
find . -name "*.txt"
Bash

-name حساس لحالة الأحرف. لو تريد بدون حساسية:

find . -iname "*.TXT"
Bash
5) البحث حسب النوع: -type

أهم الأنواع:

  • f ملف عادي (regular file)
  • d مجلد (directory)
  • l رابط رمزي (symlink)
أ) كل المجلدات فقط
find . -type d
Bash
ب) كل الملفات فقط
find . -type f
Bash
ج) كل الروابط الرمزية فقط
find . -type l
Bash
مثال مركّب: ملفات txt فقط
find . -type f -name "*.txt"
Bash
6) البحث حسب الحجم: -size

أمثلة مهمة:

ملفات أكبر من 1 ميجابايت
find . -type f -size +1M
Bash
ملفات أصغر من 100 كيلوبايت
find . -type f -size -100k
Bash
ملفات حجمها بالضبط 0 (فارغة)
find . -type f -empty
Bash
7) تحديد عمق البحث (مفيد للمبتدئين): -maxdepth
ابحث فقط في المستوى الحالي بدون الدخول للمجلدات الفرعية
find . -maxdepth 1 -type f
Bash
ابحث حتى عمق 2
find . -maxdepth 2 -name "*.txt"
Bash
8) البحث حسب الوقت (mtime) — عملي جدًا
ملفات تم تعديلها خلال آخر يوم (24 ساعة)
find . -type f -mtime -1
Bash
ملفات أقدم من 30 يوم
find . -type f -mtime +30
Bash

mtime = وقت تعديل المحتوى.

9) استبعاد مسارات/مجلدات أثناء البحث: -path + -prune

مثال: ابحث في المشروع لكن تجاهل .git و node_modules:

find . \( -path "./.git" -o -path "./node_modules" \) -prune -o -type f -name "*.js" -print
Bash

هذه صيغة متقدمة قليلًا، لكن مفيدة جدًا للمشاريع الكبيرة.

10) تنفيذ أوامر على النتائج: -exec

هذه أقوى ميزة في find.

أ) عرض الملفات مع تفاصيل ls -l
find . -type f -name "*.txt" -exec ls -l {} \;
Bash
ب) قراءة أول 3 أسطر من كل ملف txt
find . -type f -name "*.txt" -exec head -n 3 {} \;
Bash
ج) نسخ الملفات المطابقة لمجلد backup

أولًا جهّز المجلد:

mkdir -p ~/project/backup_txt
Bash

ثم:

find . -type f -name "*.txt" -exec cp {} ~/project/backup_txt/ \;
Bash

ملاحظة: هذا ينسخ باسم الملف فقط وقد يحدث تضارب إذا في ملفين بنفس الاسم من مجلدات مختلفة.

11) حذف ملفات — انتبه جدًا (Safe Delete)

في الدرس عندك استخدموا -delete، وهو صحيح لكنه خطير لو الشرط غلط.

أ) الطريقة الآمنة: اعرض أولًا
find . -type f -name "*.tmp"
Bash
ب) ثم احذف بعد التأكد
خيار 1: حذف مباشر (سريع وخطير لو أخطأت)
find . -type f -name "*.tmp" -delete
Bash
خيار 2 (أنصح للمبتدئ): اسأل قبل كل حذف
find . -type f -name "*.tmp" -exec rm -i {} \;
Bash
خيار 3: تأكيد واحد لكل مجموعة (أخف من -i)
find . -type f -name "*.tmp" -ok rm {} \;
Bash

-ok يشبه -exec لكن يسألك قبل التنفيذ.

12) دمج find مع grep (بحث داخل الملفات) — استخدام واقعي جدًا

مثال: ابحث عن كلمة “password” داخل ملفات .conf:

find /etc -type f -name "*.conf" -exec grep -nH "password" {} \; 2>/dev/null
Bash
  • -n رقم السطر
  • -H اسم الملف
  • 2>/dev/null لإخفاء أخطاء الصلاحيات
13) تدريب سريع (Practice)

نفّذ هذا على الهيكل الذي أنشأناه:

cd ~/project/find_demo

# 1) كل txt
find . -type f -name "*.txt"

# 2) كل الروابط الرمزية
find . -type l

# 3) ملفات فارغة
find . -type f -empty

# 4) احذف ملفات tmp بشكل آمن (اعرض ثم احذف)
find . -type f -name "*.tmp"
find . -type f -name "*.tmp" -exec rm -i {} \;
Bash
هل الشرح الأصلي كافي؟

نعم كبداية ممتاز، لكن الإضافات التي يحتاجها المبتدئ عادةً:

  • -maxdepth للتحكم بعمق البحث
  • -iname للبحث بدون حساسية أحرف
  • -mtime للبحث حسب الزمن
  • طريقة الاستبعاد -prune للمجلدات الثقيلة
  • حذف آمن بدل -delete مباشرة