ابحث (يونكس)

findهو أمرٌ في سطر الأوامر يُستخدم لتحديد مواقع الملفات بناءً على معايير بحث محددة ، ثم يُنفّذ إجراءات على الملفات المطابقة، مثل طباعة مسار نظام الملفات إلى المخرج القياسي . يبدأ البحث من دليل ضمن بنية هرمية، ويتنقل بشكل متكرر عبر الشجرة ، مع إمكانية تحديد عدد المستويات القصوى. تشمل معايير البحث الشائعة مطابقة نمط اسم الملف ، ومطابقة نوع الملف ، ومطابقة النطاق الزمني لآخر تعديل أو آخر وصول. عند عدم إدخال أي وسيطات، يُخرج الأمر مسار كل ملف في الشجرة بدءًا من دليل العمل . يمكن للأمر البحث في أنظمة ملفات مختلفة لأقسام تابعة لجهاز تخزين واحد أو أكثر مُثبّت ضمن دليل البداية. [ 1 ] يتوفر هذا الأمر في معظم أنظمة يونكس .

المتغيرات

ظهر الأمر لأول مرة في الإصدار الخامس من نظام يونكس كجزء من مشروع Programmer's Workbench ، وقد كتبه ديك هايت إلى جانب cpio ، [ 2 ] وقد صُمم كلاهما للاستخدام معًا. [ 3 ]

قام إريك ديكر بكتابة تطبيق GNU في الأصل، ثم قام ديفيد ماكنزي وجاي بليت وتيم وود بتطويره لاحقًا. [ 4 ] يوفر تطبيق GNU ميزات تتجاوز مواصفات POSIX.

تم نقل الأمر إلى نظام التشغيل IBM i . [ 5 ]

يوفر برنامج BusyBox الحاسوبي الأمر والعديد من الأوامر الأخرى في ملف تنفيذي واحد.find

يستخدم

يمكن وصف صيغة الأمر على النحو التالي:

$ ابحث عن المسار [-H|-L] ... [تعبير]

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

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

تعبير

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

-name pattern
يختار الملفات التي يتطابق اسمها مع نمط shell-glob.
-type type
يحدد الملفات التي تنتمي إلى نوع ملف يونكس معين :
bجهاز كتلة ( مخزن مؤقتًا)
c: جهاز حرفي (غير مخزن مؤقتًا)
d: دليل
fملف عادي
l: رابط رمزي
p: أنبوب مسمى
sمقبس
Dباب
-print
يطبع اسم الملف الذي تم العثور عليه بالإضافة إلى سطر جديد إلى المخرج القياسي . إذا لم يتضمن التعبير خيار إجراء (مثل -print0، أو -exec، أو )، فسيتم تنفيذ -okإجراء .-print
-print0
يطبع اسم الملف الذي تم العثور عليه بالإضافة إلى حرف فارغ إلى المخرج القياسي. هذا الأمر غير مطلوب بموجب معيار POSIX.
-exec program [argument...] ;
يُشغّل البرنامج مع وسائط لكل ملف مرشح، ويختار الملفات التي ينتج عنها البرنامج حالة خروج 0. إذا كان البرنامج أو أحد الوسائط فارغًا {}، فسيتم استبداله بمسار الملف المرشح. لا يحدد معيار POSIX ما يحدث في {}حالة تحديد عدة مسارات. تستبدل معظم التطبيقات كل {}مسار بمسار الملف المرشح.
-exec program [argument...] {} +
يُشغّل البرنامج مع الوسائط متبوعة بأكبر عدد ممكن من المسارات المرشحة. يتم تشغيل أوامر متعددة إذا تم تجاوز الحد الأقصى لحجم سطر الأوامر، كما هو الحال مع xargs . [ 6 ]
-ok program [argument...] ;
لكل مسار مرشح، يطلب النظام من المستخدم تأكيد العملية. إذا أكد المستخدم (عادةً بإدخال " y" أو "نعم ")، فسيعمل النظام كما هو متوقع، وإلا فلن يتم تنفيذ الأمر للمسار المرشح ولن يتم تحديد الملف.-exec program [arguments...] ;
-maxdepth
يُحدد هذا الخيار عمق البحث في الدليل. على سبيل المثال، -maxdepth 2يقتصر البحث على الدليل الجذر والأجزاء الفرعية المباشرة له.
-mtime، -ctime،-atime
وقت التعديل، ووقت تغيير عقدة البيانات ، ووقت الوصول، على التوالي. يختار الملفات التي تتطابق بياناتها الوصفية الزمنية مع عدد من الأيام الماضية. مع +بادئة، يشير الرقم إلى أقل من، ومع -بادئة أخرى، يشير الرقم إلى أقل من.
-daystart
قم بقياس الوقت من بداية اليوم بدلاً من آخر 24 ساعة.
-newer [file]، -cnewer [file]،-anewer [file]
يختار هذا الخيار الملفات التي تم تعديلها مؤخرًا مقارنةً بملف آخر. ويدعم هذا الخيار -notإضافة بادئة للحصول على نتائج عكسية أو نطاق.
-newermt YYYY-MM-DD
يختار الملفات التي تم تعديلها آخر مرة بعد التاريخ المحدد. كما يدعم -notإضافة بادئة لتاريخ التعديل السابق.

المشغلون

تُستخدم المعاملات لدمج عناصر التعبير. وتُدرج المعاملات بترتيب تنازلي حسب الأولوية:

أسبقية
( expr ); يحدد ترتيب تقييم التعبير الفرعي.
النفي
! exprصحيح إذا exprكان خطأ.
منطقي و
expr1 expr2أو expr1 -a expr2؛ expr2لا يتم تقييمها إذا expr1كانت خاطئة.
منطقي أو
expr1 -o expr2لا expr2يتم تقييمها إذا expr1كانت صحيحة.

نظراً لأن نظام الملفات قد يحتوي على هياكل متكررة عبر الروابط الصلبة واللينة ، فإن معيار POSIX يشترط أن يكتشف الأمر الحلقات اللانهائية، أي الدخول إلى دليل تمت زيارته مسبقاً وهو دليل سلف لآخر ملف تمت مصادفته. عند اكتشاف حلقة لانهائية، يجب على الأمر كتابة رسالة تشخيصية إلى الخطأ القياسي، بالإضافة إلى استعادة موقعه في التسلسل الهرمي أو إنهاء العملية.

تتحكم الخيارات المحددة في معيار POSIX -Hفي -Lكيفية تعامل الأمر مع الروابط الرمزية . السلوك الافتراضي هو عدم تتبع الروابط الرمزية. -Lيؤدي الخيار إلى تتبع الأمر للروابط الرمزية. -Hيؤدي الخيار إلى تتبع الأمر للروابط الرمزية أثناء معالجة وسائط سطر الأوامر. [ 6 ] من الإضافات الشائعة الخيار -Pلتعطيل تتبع الروابط الرمزية بشكل صريح. [ 7 ] [ 8 ]

أمثلة

البحث باستخدام الأحرف البديلة

يبحث الأمر التالي في شجرة دليل العمل الحالي عن الملفات التي تبدأ أسماؤها بـ "my". تمنع علامات الاقتباس المفردة توسيع الأمر في سطر الأوامر. فبدونها، سيستبدل سطر الأوامر "my*" بقائمة الملفات التي تبدأ أسماؤها بـ "my" في دليل العمل الحالي، والتي قد لا تكون مطابقة للملفات المطابقة في الأدلة الفرعية.

$ find . -name 'my*'

تحديد نوع الملف

يتضمن الأمر التالي -type fحصر النتائج في الملفات العادية، واستبعاد عناصر نظام الملفات الأخرى مثل الدلائل والروابط الرمزية.

$ find . -type f 

تضمين تفاصيل الملف

يتضمن الأمر التالي -lsخيار الإجراء لتضمين معلومات مفصلة عن الملف مثل الأمر ls -a.

$ find . -ls 

استبعاد شجرة الدليل الفرعي

يبحث الأمر التالي في كل دليل باستثناء شجرة الدليل الفرعي /not/this/oneكما هو محدد بواسطة -pruneالخيار، عن ملف عادي باسم myfile.

$ find / -path /not/this/one -prune -o -type f -name myfile -print 

ابحث في عدة مجلدات

يبحث الأمر التالي في شجرة الدليل الرئيسي diraوالفرعي dirbعن الملفات المسماة myf.

$ find dira dirb -name myf 

ابحث عن أي ملف من الملفات ذات الأسماء المختلفة

يعثر الأمر التالي على الملفات التي تنتهي أسماؤها إما بـ "jsp" أو "java" من خلال دمج -nameخيارين مع -oخيار آخر. يُحاط التعبير الفرعي ( -name '*jsp' -o -name '*java') بأقواس، ويُفصل كل قوس بشرطة مائلة عكسية لمنع تفسيره كأحرف خاصة في سطر الأوامر.

$ find . \( -name '*jsp' -o -name '*java' \)

تنفيذ برنامج

يُغيّر الأمر التالي صلاحيات جميع الملفات التي تحمل أسماءً مطابقة لـ "*.mp3" في شجرة الدليل "/var/ftp/mp3". يُحدد الإجراء بواسطة . لكل ملف مطابق، يُنفذ الأمر مع استبدال باسم الملف. تشير الفاصلة المنقوطة (مع بادئة شرطة مائلة عكسية لتجنب تفسيرها كفاصل أوامر) إلى نهاية الأمر. في بعض أنظمة التشغيل، يجب وضع بين علامتي اقتباس. غالبًا ما يُسبق الجزء الأخير بـ ، ولكن يمكن وضعه بين علامتي اقتباس مفردتين.-exec chmod 644 {} \;chmod 644 {}{}{};\

$ find /var/ftp/mp3 -name '*.mp3' -type f -exec chmod 644 {} \;

حذف الملفات

يحذف الأمر التالي الملفات الفارغة ويطبع أسماءها. هذا -deleteالخيار هو إضافة، أُضيفت في الأصل إلى بعض أنظمة التشغيل التابعة لعائلة BSD، [ 9 ] وهو موجود في FreeBSD 2.2.1 والإصدارات الأحدث، [ 10 ] و NetBSD 5.0 ​​والإصدارات الأحدث، [ 11 ] و OpenBSD 6.1 والإصدارات الأحدث، [ 12 ] و DragonFly BSD، [ 13 ] و GNU find، [ 14 ] و macOS . [ 15 ]

$ find . -empty -delete -print 

البحث حسب المالك

يبحث الأمر التالي في الملف المملوك للمستخدم 123.

$ find . -user 123

تجاهل حالة الأحرف

يطابق الأمر التالي أسماء الملفات متجاهلاً حالة الأحرف. هذا -inameالخيار غير مطلوب في نظام POSIX.

$ find . -iname 'MyFile*'

إذا -inameلم يكن المفتاح مدعومًا على نظامك، فقد تكون هناك تقنيات بديلة ممكنة مثل:

$ find . -name '[mM][yY][fF][iI][lL][eE]*'

البحث حسب المقاس

يبحث الأمر التالي عن الملفات التي يتراوح حجمها بين 100 كيلوبايت و 500 كيلوبايت.

$ find . -size +100k -a -size -500k 

البحث حسب الوقت

The following command searches for files in the document folder modified in the last week.

$ find~/Documents/-mtime-7 

The following command finds files last edited in February 2017.

$ find~/Documents/-newermt2017-02-01-not-newermt2017-03-01 

The following command lists files edited more recently than "document.txt".

$ find~/Documents/-newerdocument.txt 
grep
A command for searching plain-text for lines matching a regular expression.
find
A command on Microsoft-based systems that although has the same name, provides significantly different functionality than the Unix-based command.
dir
A commonly-used command for listing files on Microsoft-based systems. It provides the /s option to recursively search for files or directories.
tree
A command on Microsoft-based systems that recursively lists files of a directory tree, indenting the file names according to their position in the file hierarchy.
walk and sor
Commands on Plan 9 from Bell Labs systems that provide similar functionality as find. walk finds files in a directory tree and prints the names and sor filters (like grep) by evaluating expressions in the form of a shell script. The commands are not part of Plan 9 from User Space, so Google's Benjamin Barenblat has a ported version to POSIX systems available through GitHub.[16]
fd
An alternative to find written in Rust.[17]
locate
A tool that searches a prebuilt database instead of the file system. The performance of locate can exceed that of find, but results can be inaccurate if the database is out-of-date. Typically, the database is updated from file system information via a find command run periodically by a cron job.

See also

Notes

  1. Per normal Unix terminology, a file is a file system entry, which can be of any Unix file type, including normal file, directory, or other more-specialized types.

References

  1. "find(1) – صفحة دليل لينكس" . man7.org . مؤرشف من الأصل بتاريخ 11-11-2019 . تم الاطلاع عليه بتاريخ 19-11-2019 .
  2. ماكيلروي، دكتور في الطب (1987). قارئ أبحاث يونكس: مقتطفات مشروحة من دليل المبرمج، 1971-1986 (ملف PDF) (تقرير فني). مختبرات بيل. 139.
  3. "libarchive/libarchive" . GitHub . مؤرشف من الأصل بتاريخ 30 أبريل 2022. تم الاطلاع عليه بتاريخ 4 أكتوبر 2015 .
  4. "العثور على الملفات" . مؤرشف من الأصل بتاريخ 11-05-2022 . تم الاطلاع عليه بتاريخ 18-07-2020 .
  5. "برمجة Qshell لنظام IBM System i الإصدار 7.2" (ملف PDF) . IBM . مؤرشف (PDF) من الأصل بتاريخ 18 سبتمبر 2020. تم الاطلاع عليه بتاريخ 5 سبتمبر 2020 .
  6. 1 2 : البحث عن الملفات - مرجع الصدفة والأدوات المساعدة، مواصفات يونكس الموحدة ، الإصدار 5 من مجموعة Open Groupfind   
  7. دليل الأوامر العامة لنظام FreeBSDfind(1)  
  8. دليل مستخدم لينكس – أوامر المستخدم من Manned.orgfind(1)  
  9. "10.1.6 استخدام إجراء -delete" . GNU Findutils . مؤرشف من الأصل بتاريخ 11-05-2022 . تم الاطلاع عليه بتاريخ 06-12-2025 .
  10. "FreeBSD 2.2.1 find(1)" . 1 أبريل 1994.
  11. "NetBSD 5.0 ​​find(1)" . ١٩ يوليو ٢٠٠٧. مؤرشف من الأصل في ٢٧ يونيو ٢٠٢٥. تم الاطلاع عليه في ٦ ديسمبر ٢٠٢٥ .
  12. "OpenBSD 6.1 find(1)" . 3 يناير 2017.
  13. "DragonFly BSD find(1)" .
  14. "3.4 حذف الملفات" . GNU Findutils . مؤرشف من الأصل بتاريخ 11-05-2022 . تم الاطلاع عليه بتاريخ 06-12-2025 .
  15. "macOS find(1)" . -delete. مؤرشف من الأصل بتاريخ 2024-11-08 . تم الاطلاع عليه بتاريخ 2025-12-06 .
  16. "google / walk: أدوات مساعدة على غرار Plan 9 لاستبدال find(1)" . GitHub . مؤرشف من الأصل في 8 نوفمبر 2020. تم الاطلاع عليه في 30 مارس 2020 .
  17. بيتر، ديفيد (30 مارس 2020). "sharkdp/fd: بديل بسيط وسريع وسهل الاستخدام لـ 'find'"" . GitHub . مؤرشف من الأصل في 13 أبريل 2020. تم الاسترجاع في 30 مارس 2020 .