Jannah Theme License is not validated, Go to the theme options page to validate the license, You need a single license for each domain name.

دليل مبسّط لاكتشاف الملفات بسرعة باستخدام أمر find في Linux

كيف تمكنت أخيرًا من فتح أمر find في Linux

يحتاج الكثير من المستخدمين إلى طريقة فعّالة للوصول إلى الملفات داخل توزيعات Linux، خصوصًا عندما يتراكم المحتوى أو تتعدد المسارات. أمر find يوفّر مرونة كبيرة للبحث بدقة عن أي ملف أو مجلد اعتمادًا على الاسم، الامتداد، الحجم أو حتى تاريخ التعديل.

تعلّم استخدام هذا الأمر يساعد على توفير الوقت، وتقليل الأخطاء، وتنفيذ المهام اليومية بسهولة أكبر سواء على الحاسوب الشخصي أو الخوادم. يوضّح هذا الدليل أشهر الاستخدامات العملية لأمر find بخطوات واضحة وأمثلة مباشرة لتسهيل الفهم.

linux-mascot-wearing-sunglasses-and-using-a-laptop-surrounded-by-floating-windows-with-the-i3-window-manager-logo-in-the-background دليل مبسّط لاكتشاف الملفات بسرعة باستخدام أمر find في Linux

لقد استخدمتُ أمر find لعقود، لكنني لم أفهمه جيدًا – حتى الآن. كان إجبار نفسي على اتباعه وفكّ هذا الأمر المُراوغ هو مفتاح النجاح.

Table of Contents

مقدمة عن أمر find

يُعد أمر find من أغرب برامج لينكس التي ستستخدمها. إنه أساسي بما يكفي ليكون موجودًا في كل مكان، ولكنه غامض بما يكفي ليكون المفضل لدى الجميع. توجد بدائل مثل fd، لكن find هو القاسم المشترك الأدنى الذي يعمل تقريبًا.

في أبسط الحالات، استخدام find سهل للغاية:

find . -name '*.txt'

هذا النوع الشائع من الاستعلامات يعثر على جميع الملفات في المجلد الحالي أو أي مجلد أسفله والتي تنتهي بـ “.txt”. إذا كنت قد وصلت إلى هذا الحد، فربما لا تدرك مدى تعقيد دالة find. تحتوي صفحة دليلها على 1639 سطرًا (الإصدار 4.9.0)، وبمجرد التعمق في استخدام دالة find، تبدو أقرب إلى لغة برمجة متكاملة بدلًا من أداة مساعدة.

لطالما أزعجني هذا التعقيد. لطالما رغبت في طريقة بسيطة للعثور على الملفات التي عدّلتها مؤخرًا، لكنها كانت دائمًا ما تفلت مني. تنتهي النتائج بملفات .git أو كفوضى غير مرتبة. لذلك قررت أن أبدأ أخيرًا في استخدام دالة find؛ وكانت النتيجة مُنعشة.

اقرأ أيضا:  أفضل تطبيقات مفتوحة المصدر تجعل تجربة ألعاب Linux أكثر متعة

يبدو الاستخدام الأساسي لـ find كما يلي:

find [starting-point...] [expression]

يتبع الأمر Find هذه الخطوات لأداء مهمته:

  • يعالج كل ملف ومجلد ضمن نقطة البداية؛ يدعم نقاط بداية متعددة.
  • يطبق الاختبارات؛ إذا اجتاز الملف جميعها، فاتخذ إجراءً.
  • Act: الإجراء الافتراضي هو -print، الذي يطبع اسم الملف كاملاً.

يُظهر أمر Find البسيط، بدون أي وسيطات، كل ما هو موجود أسفل المجلد الحالي:

linux-find-bare دليل مبسّط لاكتشاف الملفات بسرعة باستخدام أمر find في Linux

قد يكون هذا مفيدًا جدًا بمفرده، لكن القوة الحقيقية لـ find تكمن في الاختبارات والإجراءات التي يدعمها.

جعل find يُبلغ عن الملفات التي تم تغييرها مؤخرًا

عند العمل على مهمة أكثر تعقيدًا كهذه، يُنصح بالتخطيط لما تحتاجه، ثم العمل على كيفية تحقيقه تدريجيًا. بالنسبة للسلوك الذي أبحث عنه، أعرف أنني أحتاج إلى:

  • ملفات أمتلكها.
  • ملفات غير موجودة في مجلدات مخفية.
  • نتائج مرتبة حسب التاريخ، مع عرض التواريخ.

من المفيد أيضًا الحصول على بعض بيانات الاختبار للتأكد من أن الأمر يُؤدي الغرض المطلوب تمامًا. في هذه الحالة، أستخدم بنية الملف التالية:

linux-find-file-examples دليل مبسّط لاكتشاف الملفات بسرعة باستخدام أمر find في Linux

البحث عن الملفات المملوكة لمستخدم

المهمة الأولى سهلة، بفضل اختبار find-user، الذي يطابق الملف فقط إذا كان المستخدم الحالي يملكه:

find . -user "${USER}"

ملاحظة
المستخدم هو متغير بيئة يحتوي على اسم المستخدم الحالي.

إذا قمت بتشغيل ما سبق، قد تلاحظ أن المخرجات تحتوي على مجلدات:

اقرأ أيضا:  اكتشفت حقائق مدهشة بعد استخدام openSUSE Linux لأول مرة

linux-find-users-files دليل مبسّط لاكتشاف الملفات بسرعة باستخدام أمر find في Linux

للتأكد من أن القائمة النهائية تحتوي فقط على ملفات، استخدم اختبار find-type. يتطلب هذا الاختبار حرفًا واحدًا للدلالة على نوع الملف المطابق: f للملف العادي، d للمجلد، وl للرابط الرمزي، وغيرها.

find . -user "${USER}" -type f

في هذه المرحلة، يقوم find بالإبلاغ عن جميع الملفات—وليس الدلائل—التي يملكها المستخدم الحالي:

 

linux-find-users-files-not-directories دليل مبسّط لاكتشاف الملفات بسرعة باستخدام أمر find في Linux

البحث عن الملفات غير الموجودة في المجلدات المخفية
الجزء التالي من المهمة هو إيقاف البحث عن الملفات من المجلدات المخفية. يُلزم الإجراء -prune الأمر find بعدم النزول إلى مجلد مطابق:

find . -path "*/.*/*" -prune

قد تبدو نتائج هذا الأمر غريبة في البداية، وهي عكس ما نريده تقريبًا:

linux-find-prune-paths دليل مبسّط لاكتشاف الملفات بسرعة باستخدام أمر find في Linux

هذا بسبب آلية عمل أمر prune، لذا إليك ما يحدث:

  • يُطابق اختبار -path جميع الملفات (بما في ذلك المجلدات) مع مسار يتضمن مجلدًا مخفيًا واحدًا على الأقل.
  • يمنع أمر -prune أمر find من الدخول إلى هذه المجلدات.
  • ونظرًا لعدم وجود إجراء آخر سوى -prune، يُطبّق أمر find إجراء -print افتراضيًا. هذا الأمر مُكافئ لأمر find . -path “*/.*/*” -prune -print.

مع ذلك، بدلًا من طباعة المجلدات المخفية التي تم تنقيحها، يُمكنك طباعة أي شيء آخر باستخدام -o:

find . -path "*/.*/*" -prune -o -print

عامل -o هو OR منطقي، مما يعني أن البحث سيطابق إما التعبير السابق أو التالي. لذلك، إذا كان المسار يحتوي على مجلد مخفي، فسيتم تقليمه؛ وإلا فسيتم طباعته (التعبير الذي لا يحتوي على اختبار سيطابق دائمًا).

عند هذه النقطة، يمكنك دمج التعبير الأصلي الذي تمت تصفيته حسب المالك ونوع الملف:

find . -path "*/.*/*" -prune -o -user "${USER}" -type f -print

يحدد أمر البحث هذا جميع الملفات المطلوبة، وليس أكثر من ذلك:

اقرأ أيضا:  5 طرق لتنزيل الملفات في Linux من Terminal بسهولة

linux-find-good-results دليل مبسّط لاكتشاف الملفات بسرعة باستخدام أمر find في Linux

كل ما تبقى هو فرزها حسب أحدث التعديلات، وعرض هذا التاريخ بجوار كل ملف.

ملاحظة

يمكنك استخدام اختبار -path لتحقيق نفس النتائج، باستخدام أمر أقصر قليلاً:

find . -type f -not -path ‘*/.*/*’ -user “${USER}”

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

فرز النتائج وطباعتها بدقة

لا يتولى أمر البحث (find) عملية الفرز بنفسه؛ لذا، يمكنك استخدام sort، وهو أحد أوامر معالجة النصوص الأساسية. ستحتاج أولًا إلى تاريخ التعديل لكل ملف. يُحدد الإجراء -printf لأمر البحث (find) كيفية الحصول على النتيجة المطلوبة بدقة:

find . -path "*/.*/*" -prune -o -user "${USER}" -type f -printf "%TY-%Tm-%Td %p\n"

سيستخدم الإجراء -printf محتوى السلسلة النصية المقتبسة لتنسيق معلومات الملف. في هذا المثال، يشير %TY إلى سنة آخر تعديل. %Tm و%Td هما الشهر واليوم على التوالي، بينما %p هو اسم الملف.

linux-find-final-sorted دليل مبسّط لاكتشاف الملفات بسرعة باستخدام أمر find في Linux

يمكنك تحديد تاريخ أكثر تفصيلاً لفرز أدق، لكنني مهتم فقط بالتواريخ، لذا فإن الخطوة الأخيرة هي نقل البيانات إلى الفرز. لاحظ أنني أرتب كل سطر بالتاريخ أولاً. لهذا غرضان: فهو يحافظ على تناسق كل شيء، ولكنه يُسهّل عملية الفرز. ما عليك سوى نقل النتائج من “بحث” إلى “فرز”:

find . -path "*/.*/*" -prune -o -user "${USER}" -type f -printf "%TY-%Tm-%Td %p\n" | sort

استخدام أمر find يسهّل التعامل مع الملفات ويمنح المستخدم قدرة أكبر على تنظيم النظام والتحكم به. مع تكرار التجربة ستصبح الصيَغ المختلفة للأمر مألوفة ويمكن تعديلها بسرعة للحصول على نتائج دقيقة. فهم الأساسيات يساعد في الانتقال لاحقًا إلى استخدامات أكثر تقدمًا مثل دمج find مع grep أو تنفيذه مع أوامر أخرى لعمليات تلقائية أكثر قوة.

زر الذهاب إلى الأعلى