كتيبات سطر الأوامر

Man » دليل find عبر الإنترنت - وثائق مفصلة عبر الإنترنت لصفحة دليل find

🌍
find - ابحث عن ملفات في هيكل دليل

ملخص

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [نقطة البداية...] [تعبير]

الوصف

توثق صفحة الدليل هذه إصدار GNU من find. يبحث أمر GNU find في شجرة الدليل التي تبدأ عند كل نقطة بداية معينة عن طريق تقييم التعبير المعطى من اليسار إلى اليمين، وفقًا لقواعد الأسبقية (انظر قسم المعاملات)، حتى يصبح الناتج معروفًا (الجانب الأيسر من العمليات المنطقية "و" خاطئ، أو صحيح للعمليات المنطقية "أو")، وعند هذه النقطة ينتقل find إلى اسم الملف التالي. إذا لم يتم تحديد أي نقطة بداية، فسيتم افتراض `.'.

إذا كنت تستخدم find في بيئة يكون فيها الأمان مهمًا (على سبيل المثال، إذا كنت تستخدمه للبحث في الدلائل التي يمكن للمستخدمين الآخرين الكتابة فيها)، فيجب عليك قراءة الفصل "اعتبارات أمنية" في وثائق findutils، والتي تسمى "العثور على الملفات" وتأتي مع findutils. يحتوي هذا المستند أيضًا على الكثير من التفاصيل والمناقشة الإضافية مقارنة بصفحة الدليل هذه، لذلك قد تجده مصدرًا أكثر فائدة للمعلومات.

الخيارات

تتحكم الخيارات -H و -L و -P في معالجة الروابط الرمزية. يتم اعتبار وسيطات سطر الأوامر التالية أسماء للملفات أو الدلائل التي سيتم فحصها، حتى الوسيط الأول الذي يبدأ بـ `-` أو الوسيط `(` أو `!`. يتم اعتبار هذا الوسيط وأي وسيطات لاحقة بمثابة التعبير الذي يصف ما سيتم البحث عنه. إذا لم يتم إعطاء أي مسارات، فسيتم استخدام الدليل الحالي. إذا لم يتم إعطاء أي تعبير، فسيتم استخدام التعبير -print (ولكن يجب عليك التفكير في استخدام -print0 بدلاً من ذلك).

تتحدث صفحة الدليل هذه عن "الخيارات" داخل قائمة التعبيرات. تتحكم هذه الخيارات في سلوك find ولكن يتم تحديدها مباشرة بعد اسم المسار الأخير. يجب أن تظهر الخيارات الخمسة "الحقيقية" -H و -L و -P و -D و -O قبل اسم المسار الأول، إذا كان ذلك ممكنًا. من الناحية النظرية، يمكن استخدام الشرطتين -- للإشارة إلى أن أي وسيطات متبقية ليست خيارات، ولكن هذا لا يعمل حقًا بسبب الطريقة التي يحدد بها find نهاية وسيطات المسار التالية: عن طريق القراءة حتى يأتي وسيط التعبير (والذي يبدأ أيضًا بـ `-). الآن، إذا بدأ وسيط المسار بـ \-، فسيعامله find كـ وسيط تعبير بدلاً من ذلك. وبالتالي، لضمان اعتبار جميع نقاط البداية على هذا النحو، وخاصة لمنع التعامل مع أنماط الأحرف البادئة (wildcard) التي يتم توسيعها بواسطة shell الذي يتم استدعاؤه على أنها وسيطات تعبير عن طريق الخطأ، فمن الأفضل عمومًا إضافة بادئة إلى أحرف البادئة أو أسماء المسارات المشكوك فيها إما باستخدام \./` أو باستخدام أسماء مسارات مطلقة تبدأ بـ `/. بدلاً من ذلك، من الآمن عمومًا على الرغم من أنه ليس قياسيًا استخدام خيار GNU-files0-from` لتمرير نقاط بداية عشوائية إلى find.


-P     لا يتم تتبع الروابط الرمزية مطلقًا. هذا هو السلوك الافتراضي. عندما يقوم `find` بفحص أو طباعة معلومات حول الملفات، وإذا كان الملف رابطًا رمزيًا، يجب استخدام المعلومات من خصائص الرابط الرمزي نفسه.

-L     تتبع الروابط الرمزية. عندما يقوم `find` بفحص أو طباعة معلومات حول الملفات، يجب استخدام المعلومات من خصائص الملف الذي يشير إليه الرابط، وليس من الرابط نفسه (إلا إذا كان رابطًا رمزيًا معطلاً أو كان `find` غير قادر على فحص الملف الذي يشير إليه الرابط). يعني استخدام هذا الخيار -noleaf. إذا استخدمت لاحقًا الخيار -P، فسيظل -noleaf ساري المفعول. إذا كان -L قيد التشغيل واكتشف `find` رابطًا رمزيًا إلى دليل فرعي أثناء البحث، فسيتم البحث في الدليل الفرعي الذي يشير إليه الرابط الرمزي.

عندما يكون الخيار -L قيد التشغيل، سيطابق المحدد -type دائمًا نوع الملف الذي يشير إليه الرابط الرمزي بدلاً من الرابط نفسه (إلا إذا كان الرابط الرمزي معطلاً). قد تؤدي الإجراءات التي يمكن أن تتسبب في تعطيل الروابط الرمزية أثناء تنفيذ `find` (على سبيل المثال، -delete) إلى سلوك مربك. يؤدي استخدام -L إلى أن يعيد المحدد -lname و -ilname دائمًا قيمة "خطأ".

-H     لا يتم تتبع الروابط الرمزية، باستثناء أثناء معالجة وسيطات سطر الأوامر. عندما يقوم `find` بفحص أو طباعة معلومات حول الملفات، يجب استخدام المعلومات من خصائص الرابط الرمزي نفسه. الاستثناء الوحيد لهذا السلوك هو عندما يكون الملف المحدد في سطر الأوامر رابطًا رمزيًا، ويمكن حل الرابط. في هذه الحالة، يتم استخدام المعلومات من الملف الذي يشير إليه الرابط (أي يتم تتبع الرابط). يتم استخدام معلومات حول الرابط نفسه كحل احتياطي إذا لم يتمكن `find` من فحص الملف الذي يشير إليه الرابط الرمزي. إذا كان -H قيد التشغيل وكان أحد المسارات المحددة في سطر الأوامر رابطًا رمزيًا إلى دليل، فسيتم فحص محتويات هذا الدليل (على الرغم من أن -maxdepth 0 سيمنع ذلك).

إذا تم تحديد أكثر من واحد من الخيارات -H و -L و -P، فإن كل خيار يلغي الآخر؛ الخيار الأخير الذي يظهر في سطر الأوامر هو الذي سيسري مفعوله. نظرًا لأنه الافتراضي، يجب اعتبار الخيار -P قيد التشغيل ما لم يتم تحديد -H أو -L.

غالبًا ما يقوم `find` بإجراء عمليات فحص للملفات أثناء معالجة سطر الأوامر نفسه، قبل بدء أي بحث. تؤثر هذه الخيارات أيضًا على كيفية معالجة هذه الوسيطات. على وجه التحديد، هناك عدد من الاختبارات التي تقارن الملفات المدرجة في سطر الأوامر بالملف الذي نقوم بفحصه حاليًا. في كل حالة، سيتم فحص الملف المحدد في سطر الأوامر وسيتم حفظ بعض خصائصه. إذا كان الملف المحدد رابطًا رمزيًا، وكان الخيار -P قيد التشغيل (أو إذا لم يتم تحديد -H أو -L)، فسيتم استخدام المعلومات من خصائص الرابط الرمزي للمقارنة. خلاف ذلك، سيتم استخدام المعلومات من خصائص الملف الذي يشير إليه الرابط. إذا كان `find` غير قادر على تتبع الرابط (على سبيل المثال، لأنه لا يملك الأذونات الكافية أو يشير الرابط إلى ملف غير موجود)، فسيتم استخدام خصائص الرابط نفسه.

عندما تكون خيارات -H أو -L قيد التنفيذ، سيتم إلغاء الإشارة إلى أي روابط رمزية مدرجة كوسيطة لـ -newer، وسيتم أخذ الطابع الزمني من الملف الذي تشير إليه الرابط الرمزي. وينطبق هذا الاعتبار نفسه على -newerXY و -anewer و -cnewer.

يكون لخيار -follow تأثير مماثل لخيار -L، ولكنه يسري في النقطة التي يظهر فيها (أي، إذا لم يتم استخدام -L ولكن تم استخدام -follow، فسيتم إلغاء الإشارة إلى أي روابط رمزية تظهر بعد -follow في سطر الأوامر، ولن يتم إلغاء الإشارة إلى تلك التي تسبقه).

-D debugopts
اطبع معلومات تشخيصية؛ يمكن أن يكون هذا مفيدًا لتشخيص المشكلات المتعلقة بسبب عدم قيام `find` بما تريده. يجب أن تكون قائمة خيارات التصحيح مفصولة بفواصل. لا تضمن التوافق بين إصدارات `findutils` المختلفة. للحصول على قائمة كاملة بخيارات التصحيح الصالحة، راجع إخراج الأمر `find -D help`. تشمل خيارات التصحيح الصالحة:

exec    اعرض معلومات تشخيصية تتعلق بخيارات `-exec` و `-execdir` و `-ok` و `-okdir`.

opt اطبع معلومات تشخيصية تتعلق بتحسين شجرة التعبيرات؛ راجع الخيار `-O`.

rates   اطبع ملخصًا يشير إلى عدد المرات التي نجح فيها كل شرط أو فشل.

search  تنقل عبر شجرة الدليل بشكل مطول.

stat    اطبع رسائل أثناء فحص الملفات باستخدام استدعاءات النظام `stat` و `lstat`. يحاول برنامج `find` تقليل عدد هذه الاستدعاءات.

tree    اعرض شجرة التعبيرات في شكلها الأصلي والمحسن.

all قم بتمكين جميع خيارات التصحيح الأخرى (باستثناء `help`).

help    اشرح خيارات التصحيح.

-Olevel
يقوم بتمكين تحسين الاستعلام. يعيد برنامج `find` ترتيب الاختبارات لتسريع التنفيذ مع الحفاظ على التأثير العام؛ أي أن الاختبارات ذات الآثار الجانبية لا تتم إعادة ترتيبها بالنسبة لبعضها البعض. التحسينات التي يتم إجراؤها في كل مستوى من مستويات التحسين هي كما يلي:

0   يعادل مستوى التحسين 1.

1   هذا هو مستوى التحسين الافتراضي ويتوافق مع السلوك التقليدي. تتم إعادة ترتيب التعبيرات بحيث يتم إجراء الاختبارات القائمة فقط على أسماء الملفات (على سبيل المثال، `-name` و `-regex`) أولاً.

2   يتم إجراء أي اختبارات `-type` أو `-xtype` بعد أي اختبارات تعتمد فقط على أسماء الملفات، ولكن قبل أي اختبارات تتطلب معلومات من عقدة الملف. في العديد من إصدارات Unix الحديثة، يتم إرجاع أنواع الملفات بواسطة `readdir()` وبالتالي فإن هذه الاختبارات أسرع في التقييم من الاختبارات التي تحتاج إلى استدعاء `stat` للملف أولاً. إذا كنت تستخدم الاختبار `-fstype FOO` وتحدد نوع نظام ملفات `FOO` غير معروف (أي موجود في `/etc/mtab`) في وقت بدء `find`، فإن هذا الاختبار يعادل `-false`.

3 في مستوى التحسين هذا، يتم تمكين مُحسِّن الاستعلام القائم على التكلفة بالكامل.
يتم تعديل ترتيب الاختبارات بحيث يتم إجراء الاختبارات الرخيصة (أي السريعة) أولاً، ويتم إجراء الاختبارات الأكثر تكلفة لاحقًا، إذا لزم الأمر. ضمن كل نطاق تكلفة،
يتم تقييم المسندات في وقت مبكر أو متأخر اعتمادًا على احتمالية نجاحها أو فشلها. بالنسبة إلى `-o`، يتم تقييم المسندات التي من المحتمل أن تنجح في وقت مبكر، وبالنسبة إلى `-a`، يتم تقييم المسندات التي من المحتمل أن تفشل في وقت مبكر.

يمتلك مُحسِّن التكلفة فكرة ثابتة حول مدى احتمالية نجاح أي اختبار معين.
في بعض الحالات، يأخذ الاحتمال في الاعتبار الطبيعة المحددة للاختبار (على سبيل المثال،
يُفترض أن يكون الاختبار `-type f` أكثر عرضة للنجاح من `-type c`). يتم حاليًا تقييم مُحسِّن التكلفة القائم على التكلفة. إذا لم يؤدِ ذلك فعليًا إلى تحسين أداء `find`، فسيتم إزالته مرة أخرى. على العكس من ذلك، قد يتم تمكين التحسينات التي تثبت أنها موثوقة وقوية وفعالة في مستويات تحسين أقل بمرور الوقت. ومع ذلك، لن يتم تغيير السلوك الافتراضي (أي مستوى التحسين 1) في سلسلة إصدار 4.3.x. تقوم مجموعة اختبار `findutils` بتشغيل جميع الاختبارات على `find` في كل مستوى من مستويات التحسين وتضمن أن تكون النتيجة هي نفسها.

يمكن أن يؤدي إعادة ترتيب العمليات التي يقوم بها مُحسِّن التكلفة إلى تغيير السلوك الذي يلاحظه المستخدم. على سبيل المثال، المسندان `-readable` و `-empty` حساسان لإعادة الترتيب. إذا تم تشغيلهما بالترتيب `-empty -readable`، فستظهر رسالة خطأ للأدلة التي لا يمكن قراءتها. إذا تم تشغيلهما بالترتيب `-readable -empty`، فلن تظهر رسالة خطأ. هذا هو السبب في أن إعادة ترتيب العمليات هذه لا يتم إجراؤها في مستوى التحسين الافتراضي.

التعبير

الجزء الموجود في سطر الأوامر بعد قائمة نقاط البداية هو التعبير. هذا نوع من مواصفات الاستعلام يصف كيفية مطابقة الملفات وماذا نفعل بالملفات التي تمت مطابقتها. يتكون التعبير من سلسلة من العناصر:

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

الإجراءات تتسبب الإجراءات في حدوث آثار جانبية (مثل طباعة شيء ما على الإخراج القياسي) وتعيد إما قيمة صحيحة أو خاطئة، وعادةً ما تكون بناءً على ما إذا كانت ناجحة أم لا. على سبيل المثال، يطبع الإجراء -print اسم الملف الحالي على الإخراج القياسي.

الخيارات العامة تؤثر الخيارات العامة على تشغيل الاختبارات والإجراءات المحددة في أي جزء من سطر الأوامر. تعيد الخيارات العامة دائمًا قيمة صحيحة. على سبيل المثال، يجعل الخيار -depth find يتصفح نظام الملفات بترتيب عميق أولاً.

الخيارات الموضعية تؤثر الخيارات الموضعية فقط على الاختبارات أو الإجراءات التي تليها. تعيد الخيارات الموضعية دائمًا قيمة صحيحة. على سبيل المثال، الخيار -regextype هو خيار موضعي، يحدد لهجة التعبير النمطي للتعبيرات النمطية التي تظهر لاحقًا في سطر الأوامر.


المُشغّلات تُستخدم المُشغّلات لربط العناصر الأخرى داخل التعبير. ومن أمثلتها: -o (والذي يعني "أو" منطقيًا) و -a (والذي يعني "و" منطقيًا). عندما يكون المُشغّل مفقودًا، يُفترض وجود -a.

يتم تنفيذ الإجراء -print على جميع الملفات التي يكون التعبير صحيحًا لها، إلا إذا كان يحتوي على إجراء آخر غير -prune أو -quit. الإجراءات التي تمنع الإجراء الافتراضي -print هي: -delete و -exec و -execdir و -ok و -okdir و -fls و -fprint و -fprintf و -ls و -print و -printf.

يعمل الإجراء -delete أيضًا كخيار (لأنه يعني -depth).

الخيارات الموضعية

تعيد الخيارات الموضعية دائمًا القيمة "صحيح". وهي تؤثر فقط على الاختبارات التي تحدث لاحقًا في سطر الأوامر.

-daystart

يقيس الوقت (لخيارات -amin و -atime و -cmin و -ctime و -mmin و -mtime) من بداية اليوم بدلاً من 24 ساعة مضت. هذا الخيار يؤثر فقط على الاختبارات التي تظهر لاحقًا في سطر الأوامر.

-follow

تم إهماله؛ استخدم الخيار -L بدلاً من ذلك. يتبع الروابط الرمزية. يعني -noleaf. يؤثر الخيار -follow فقط على الاختبارات التي تظهر بعده في سطر الأوامر. ما لم يتم تحديد الخيار -H أو -L، فإن موضع الخيار -follow يغير سلوك المحدد -newer؛ سيتم إلغاء الإشارة إلى أي ملفات مدرجة كوسيطة للخيار -newer إذا كانت روابط رمزية. وينطبق نفس الاعتبار على -newerXY و -anewer و -cnewer. وبالمثل، سيتطابق المحدد -type دائمًا مع نوع الملف الذي تشير إليه الرابط الرمزي بدلاً من الرابط نفسه. يؤدي استخدام -follow إلى أن يُعيد المحددات -lname و -ilname دائمًا القيمة "خطأ".

-regextype type

يغير بناء الجملة للتعبير النمطي الذي يفهمه الاختباران -regex و -iregex اللذان يظهران لاحقًا في سطر الأوامر. لعرض أنواع التعبيرات النمطية المعروفة، استخدم -regextype help. تشرح وثائق Texinfo (انظر "راجع أيضًا") معنى والاختلافات بين الأنواع المختلفة من التعبيرات النمطية. إذا لم تستخدم هذا الخيار، فسيتصرف find كما لو تم تحديد نوع التعبير النمطي "emacs".

-warn و -nowarn

يشغل أو يوقف رسائل التحذير. تنطبق هذه التحذيرات فقط على استخدام سطر الأوامر، وليس على أي ظروف قد يواجهها find عند البحث في الدلائل. السلوك الافتراضي يتوافق مع -warn إذا كان الإدخال القياسي هو طرفية (tty)، ومع -nowarn خلاف ذلك. إذا تم إنشاء رسالة تحذير تتعلق باستخدام سطر الأوامر، فلن يتأثر حالة الخروج لـ find. إذا تم تعيين متغير البيئة POSIXLY_CORRECT، وتم استخدام -warn أيضًا، فسيتم تحديد ما إذا كانت أي تحذيرات ستكون نشطة.

الخيارات العامة

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


تظهر الخيارات العامة بعد قائمة نقاط البداية، وبالتالي فهي ليست من نفس نوع الخيارات مثل -L، على سبيل المثال.

`-d` مرادف لـ `-depth`، للتوافق مع FreeBSD و NetBSD و macOS X و OpenBSD.

`-depth` تتم معالجة محتويات كل دليل قبل الدليل نفسه. كما أن إجراء `-delete` يستلزم أيضًا `-depth`.

`-files0-from file` يتم قراءة نقاط البداية من الملف بدلاً من الحصول عليها من سطر الأوامر. على عكس القيود المعروفة في تمرير نقاط البداية عبر الوسائط في سطر الأوامر، وهي القيود المفروضة على عدد أسماء الملفات، والغموض المتأصل في تعارض أسماء الملفات مع أسماء الخيارات، يتيح استخدام هذا الخيار تمرير عدد اختياري من نقاط البداية إلى `find` بأمان.

يُعتبر استخدام هذا الخيار وتمرير نقاط البداية في سطر الأوامر أمرًا متعارضًا، وبالتالي لا يُسمح بهما في نفس الوقت.

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

يجب فصل نقاط البداية في الملف بأحرف NULL من ASCII. لا يُسمح بوجود حرفي NULL متتاليين، أي اسم ملف ذو طول صفري، وسيؤدي ذلك إلى ظهور رسالة خطأ متبوعة برمز خروج غير صفري لاحقًا.

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

تكون معالجة نقاط البداية كما هي، على سبيل المثال، سيتعمق `find` في الأدلة الفرعية ما لم يتم منعه بخلاف ذلك. لمعالجة نقاط البداية فقط، يمكن إضافة الخيار `-maxdepth 0`.

ملاحظات إضافية: إذا تم إدراج ملف أكثر من مرة في ملف الإدخال، فمن غير المحدد ما إذا كان سيتم زيارته أكثر من مرة. إذا تم تعديل الملف أثناء تشغيل `find`، فإن النتيجة غير محددة أيضًا. أخيرًا، موضع البحث داخل الملف المحدد في الوقت الذي يخرج فيه `find`، سواء كان ذلك باستخدام `-quit` أو بأي طريقة أخرى، غير محدد أيضًا. المقصود بـ "غير محدد" هنا هو أنه قد يعمل أو قد لا يعمل، وقد يفعل شيئًا معينًا، وأن السلوك قد يتغير من منصة إلى أخرى، أو من إصدار `findutils` إلى آخر.

`-help`, `--help`
اطبع ملخصًا لاستخدام سطر الأوامر لـ `find` واخرج.

`-ignore_readdir_race`
عادةً، سيصدر `find` رسالة خطأ عندما يفشل في الحصول على حالة ملف. إذا قمت بإعطاء هذا الخيار وتم حذف ملف بين الوقت الذي يقرأ فيه `find` اسم الملف من الدليل والوقت الذي يحاول فيه الحصول على حالة الملف، فلن يتم إصدار أي رسالة خطأ. ينطبق هذا أيضًا على الملفات أو الأدلة التي يتم إعطاء أسمائها في سطر الأوامر. يسري هذا الخيار في وقت قراءة سطر الأوامر، مما يعني أنه لا يمكنك البحث في جزء من نظام الملفات باستخدام هذا الخيار وجزء آخر بدونه (إذا كنت بحاجة إلى القيام بذلك، فستحتاج إلى إصدار أمرين `find`، أحدهما مع الخيار والآخر بدونه).

علاوة على ذلك، سيؤدي استخدام الخيار -ignore_readdir_race مع الأمر find إلى تجاهل الأخطاء الخاصة بالإجراء -delete في حالة اختفاء الملف منذ قراءة الدليل الأصلي: لن يتم إخراج رسالة خطأ، وسيكون رمز الإرجاع للإجراء -delete صحيحًا.

`-maxdepth levels`

انخفض إلى أقصى عدد من المستويات (عدد صحيح غير سالب) من الدلائل أسفل نقاط البداية. استخدام -maxdepth 0 يعني تطبيق الاختبارات والإجراءات فقط على نقاط البداية نفسها.

`-mindepth levels`

لا تقم بتطبيق أي اختبارات أو إجراءات في المستويات الأقل من levels (عدد صحيح غير سالب). استخدام -mindepth 1 يعني معالجة جميع الملفات باستثناء نقاط البداية.

`-mount` لا تنزل إلى الدلائل الموجودة على أنظمة ملفات أخرى. اسم بديل للخيار `-xdev`، للتوافق مع بعض الإصدارات الأخرى من الأمر `find`.

`-noignore_readdir_race`

يعطل تأثير الخيار -ignore_readdir_race.

`-noleaf`

لا تقم بالتحسين بافتراض أن الدلائل تحتوي على عدد أقل بـ 2 من الدلائل الفرعية مقارنة بعدد الروابط الصلبة الخاصة بها. هذا الخيار ضروري عند البحث في أنظمة الملفات التي لا تتبع اصطلاح رابط الدليل الخاص بـ Unix، مثل أنظمة ملفات CD-ROM أو MS-DOS أو نقاط تحميل وحدة تخزين AFS. يحتوي كل دليل على نظام ملفات Unix عادي على رابطين صلبين على الأقل: اسمه وإدخال ".". بالإضافة إلى ذلك، يحتوي كل من الدلائل الفرعية الخاصة به (إذا كانت موجودة) على إدخال ".." مرتبط بهذا الدليل. عندما يقوم الأمر find بفحص دليل، بعد أن قام بإحصاء عدد أقل بـ 2 من الدلائل الفرعية مقارنة بعدد الروابط الخاصة بالدليل، فإنه يعلم أن بقية الإدخالات في الدليل ليست دلائل (ملفات "أوراق" في شجرة الدليل). إذا كانت هناك حاجة فقط لفحص أسماء الملفات، فلا توجد حاجة لإحصائها؛ هذا يعطي زيادة كبيرة في سرعة البحث.

`-version، --version`

اطبع رقم إصدار الأمر find ثم اخرج.

`-xdev` لا تنزل إلى الدلائل الموجودة على أنظمة ملفات أخرى.

الاختبارات

تسمح بعض الاختبارات، مثل -newerXY و -samefile، بإجراء مقارنة بين الملف الذي يتم فحصه حاليًا والملف المرجعي المحدد في سطر الأوامر. عند استخدام هذه الاختبارات، يتم تحديد تفسير الملف المرجعي بواسطة الخيارات -H و -L و -P وأي خيارات -follow سابقة، ولكن يتم فحص الملف المرجعي مرة واحدة فقط، في وقت تحليل سطر الأوامر. إذا لم يتمكن من فحص الملف المرجعي (على سبيل المثال، إذا فشلت استدعاء النظام [stat]({filename}../../stat)(2) الخاص به)، فسيتم إصدار رسالة خطأ، وسيخرج الأمر find بحالة غير صفرية.


يمكن تحديد وسيطة رقمية n للاختبارات (مثل -amin و -mtime و -gid و -inum و -links و -size و -uid و -used) على النحو التالي:

+n     أكبر من n،

-n     أقل من n،

n      يساوي n تمامًا.

الاختبارات المدعومة:

-amin n
تم الوصول إلى الملف آخر مرة قبل n دقيقة، أو بعدها، أو تمامًا قبل n دقيقة.

-anewer reference
وقت آخر وصول إلى الملف الحالي أحدث من وقت آخر تعديل للبيانات في ملف الإشارة. إذا كانت reference عبارة عن رابط رمزي وكان الخيار -H أو الخيار -L قيد التنفيذ، فسيتم دائمًا استخدام وقت آخر تعديل للبيانات للملف الذي يشير إليه.

-atime n
تم الوصول إلى الملف آخر مرة قبل n * 24 ساعة، أو بعدها، أو تمامًا قبل n * 24 ساعة. عندما يحدد find عدد الفترات المكونة من 24 ساعة التي مرت منذ آخر وصول إلى الملف، يتم تجاهل أي جزء كسري، لذلك لمطابقة -atime +1، يجب أن يكون الملف قد تم الوصول إليه قبل يومين على الأقل.

-cmin n
تم تغيير حالة الملف آخر مرة قبل n دقيقة، أو بعدها، أو تمامًا قبل n دقيقة.

-cnewer reference
وقت آخر تغيير في حالة الملف الحالي أحدث من وقت آخر تعديل للبيانات في ملف الإشارة. إذا كانت reference عبارة عن رابط رمزي وكان الخيار -H أو الخيار -L قيد التنفيذ، فسيتم دائمًا استخدام وقت آخر تعديل للبيانات للملف الذي يشير إليه.

-ctime n
تم تغيير حالة الملف آخر مرة قبل n * 24 ساعة، أو بعدها، أو تمامًا قبل n * 24 ساعة. انظر التعليقات الخاصة بـ -atime لفهم كيفية تأثير التقريب على تفسير أوقات تغيير حالة الملف.

-empty الملف فارغ وهو إما ملف عادي أو دليل.

-executable
يطابق الملفات القابلة للتنفيذ والأدلة القابلة للبحث (بمعنى حل اسم الملف) بواسطة المستخدم الحالي. يأخذ هذا في الاعتبار قوائم التحكم في الوصول وآثار الأذونات الأخرى التي يتجاهلها اختبار -perm. يستخدم هذا الاختبار استدعاء النظام access(2)، وبالتالي يمكن خداعه بواسطة خوادم NFS التي تقوم بـ UID mapping (أو rootsquashing)، حيث يتم تنفيذ access(2) في نواة العميل ولا يمكنه استخدام معلومات UID mapping الموجودة على الخادم. نظرًا لأن هذا الاختبار يعتمد فقط على نتيجة استدعاء النظام access(2)، فلا توجد ضمانة بأن الملف الذي ينجح هذا الاختبار يمكن تنفيذه بالفعل.

-false دائمًا ما تكون النتيجة خاطئة.

-fstype type
الملف موجود على نظام ملفات من النوع type. تختلف أنواع أنظمة الملفات الصالحة بين إصدارات Unix المختلفة؛ فيما يلي قائمة غير مكتملة بأنواع أنظمة الملفات المقبولة في بعض إصدارات Unix أو غيرها: ufs و 4.2 و 4.3 و nfs و tmp و mfs و S51K و S52K. يمكنك استخدام -printf مع التوجيه %F لمعرفة أنواع أنظمة الملفات الخاصة بك.

-gid n معرف المجموعة الرقمي للملف أقل من، أو أكبر من، أو يساوي n.

-group gname
ينتمي الملف إلى المجموعة gname (يُسمح بمعرف المجموعة الرقمي).

-ilname pattern
مثل -lname، ولكن المطابقة غير حساسة لحالة الأحرف. إذا كان الخيار -L أو الخيار -follow قيد التنفيذ، فسيعيد هذا الاختبار نتيجة خاطئة ما لم يكن الرابط الرمزي معطلاً.

-iname النمط

يشبه -name، ولكن المطابقة غير حساسة لحالة الأحرف. على سبيل المثال، تطابق الأنماط fo* و F?? أسماء الملفات مثل Foo و FOO و foo و fOo وما إلى ذلك. سيطابق النمط *foo* أيضًا ملفًا يسمى .foobar.

-inum n

الملف لديه رقم عقدة أصغر من أو أكبر من أو مساوٍ لـ n. من الأسهل عادةً استخدام اختبار -samefile بدلاً من ذلك.

-ipath النمط

يشبه -path، ولكن المطابقة غير حساسة لحالة الأحرف.

-iregex النمط

يشبه -regex، ولكن المطابقة غير حساسة لحالة الأحرف.

-iwholename النمط

راجع -ipath. هذا البديل أقل قابلية للنقل من -ipath.

-links n

الملف لديه أقل من أو أكثر من أو بالضبط n من الارتباطات الصلبة.

-lname النمط

الملف هو رابط رمزي يتطابق محتواه مع النمط -lname. لا يتم التعامل مع الأحرف الخاصة \ أو . بشكل خاص. إذا كان الخيار -L أو الخيار -follow قيد التنفيذ، فسيعيد هذا الاختبار قيمة خاطئة ما لم يكن الرابط الرمزي معطلاً.

-mmin n

تم تعديل بيانات الملف آخر مرة قبل أقل من أو أكثر من أو بالضبط n دقيقة.

-mtime n

تم تعديل بيانات الملف آخر مرة قبل أقل من أو أكثر من أو بالضبط n * 24 ساعة. راجع التعليقات الخاصة بـ -atime لفهم كيفية تأثير التقريب على تفسير أوقات تعديل الملف.

-name النمط

يطابق الجزء الأساسي من اسم الملف (المسار مع إزالة الدلائل الرئيسية) النمط -name. نظرًا لإزالة الدلائل الرئيسية من أسماء الملفات، يجب ألا يتضمن النمط شرطة مائلة، لأن -name a/b لن يطابق أي شيء (وربما تريد استخدام -path بدلاً من ذلك). الاستثناء من ذلك هو عند استخدام شرطة مائلة واحدة فقط كنمط (-name /)، لأنها سلسلة صالحة لمطابقة الدليل الجذر / (لأن الاسم الأساسي لـ / هو /). يتم إصدار تحذير إذا حاولت تمرير نمط يحتوي على شرطة مائلة واحدة (ولكن ليس فقط شرطة مائلة واحدة)، ما لم يتم تعيين متغير البيئة POSIXLY_CORRECT أو يتم استخدام الخيار -nowarn.

لتجاهل دليل والملفات الموجودة تحته، استخدم -prune بدلاً من التحقق من كل ملف في الشجرة؛ راجع مثالًا في وصف هذا الإجراء. لا يتم التعرف على الأقواس المتعرجة على أنها ذات معنى خاص، على الرغم من أن بعض الأصداف، بما في ذلك Bash، تضفي معنى خاصًا على الأقواس المتعرجة في الأنماط الخاصة بالصدافة. يتم إجراء مطابقة اسم الملف باستخدام دالة المكتبة fnmatch(3). لا تنس إحاطة النمط بعلامات اقتباس لحمايته من التوسع بواسطة الصدفة.

-newer مرجع

وقت آخر تعديل للبيانات للملف الحالي أحدث من وقت آخر تعديل للبيانات لملف المرجع. إذا كان reference رابطًا رمزيًا وكان الخيار -H أو الخيار -L قيد التنفيذ، فسيتم دائمًا استخدام وقت آخر تعديل للبيانات للملف الذي يشير إليه.

-newerXY مرجع

ينجح إذا كانت الطابع الزمني X للملف الذي يتم النظر فيه أحدث من الطابع الزمني Y لملف reference. يمكن أن تكون الأحرف X و Y أيًا من الأحرف التالية:


a   وقت الوصول إلى الملف المحدد.
B   وقت إنشاء الملف المحدد.
c   وقت تغيير حالة الإدخال (inode) للملف المحدد.
m   وقت تعديل الملف المحدد.
t   يتم تفسير المرجع مباشرةً على أنه وقت.

بعض المجموعات غير صالحة؛ على سبيل المثال، من غير الصالح أن يكون X هو t. بعض المجموعات غير مدعومة في جميع الأنظمة؛ على سبيل المثال، B غير مدعوم في جميع الأنظمة. إذا تم تحديد مجموعة غير صالحة أو غير مدعومة من XY، فستحدث خطأ فادح. يتم تفسير مواصفات الوقت كما هو الحال بالنسبة للوسيطة الخاصة بخيار -d في الأمر date الخاص بـ GNU. إذا حاولت استخدام وقت إنشاء ملف مرجعي، ولم يكن من الممكن تحديد وقت الإنشاء، فستظهر رسالة خطأ فادحة. إذا حددت اختبارًا يشير إلى وقت إنشاء الملفات التي يتم فحصها، فسيفشل هذا الاختبار لأي ملفات لا يُعرف فيها وقت الإنشاء.

-nogroup

لا توجد مجموعة تتوافق مع معرف المجموعة الرقمي للملف.

-nouser

لا يوجد مستخدم يتوافق مع معرف المستخدم الرقمي للملف.

-path نمط

اسم الملف يطابق النمط (pattern) الخاص بـ shell. لا يتم التعامل مع الأحرف الخاصة \ أو . بشكل خاص؛ لذلك، على سبيل المثال، find . -path "./sr*sc" ستطبع إدخالًا لدليل يسمى ./src/misc (إذا كان موجودًا). لتجاهل شجرة دليل بأكملها، استخدم -prune بدلاً من التحقق من كل ملف في الشجرة. لاحظ أن اختبار مطابقة النمط ينطبق على اسم الملف بأكمله، بدءًا من إحدى نقاط البداية المحددة في سطر الأوامر. لن يكون من المنطقي استخدام اسم مسار مطلق هنا إلا إذا كانت نقطة البداية ذات الصلة هي أيضًا مسار مطلق. هذا يعني أن هذا الأمر لن يطابق أي شيء: find bar -path /foo/bar/myfile -print يقارن الأمر find الوسيطة -path بتسلسل اسم الدليل والاسم الأساسي للملف الذي يفحصه. نظرًا لأن التسلسل لن ينتهي أبدًا بشرطة مائلة، فلن يطابق أي وسيطات -path تنتهي بشرطة مائلة أي شيء (باستثناء ربما نقطة بداية محددة في سطر الأوامر). يتوفر أيضًا المُحدد -path في الأمر find الخاص بـ HP-UX وهو جزء من معيار POSIX 2008.

-perm وضع

بتات الأذونات الخاصة بالملف مطابقة تمامًا للوضع (mode) (ثماني أو رمزي). نظرًا لضرورة إجراء مطابقة تامة، إذا كنت تريد استخدام هذا الشكل للأوضاع الرمزية، فقد تحتاج إلى تحديد سلسلة وضع معقدة إلى حد ما. على سبيل المثال، -perm g=w سيطابق فقط الملفات التي تحتوي على الوضع 0020 (أي، الملفات التي يكون فيها إذن الكتابة للمجموعة هو الإذن الوحيد المعين). من المحتمل أكثر أنك تريد استخدام الأشكال \ أو -، على سبيل المثال، -perm -g=w، والذي يطابق أي ملف بإذن كتابة للمجموعة. راجع قسم الأمثلة للحصول على بعض الأمثلة التوضيحية.

-perm -وضع

يتم تعيين جميع بتات الأذونات المحددة في الوضع (mode) للملف. يتم قبول الأوضاع الرمزية في هذا الشكل، وهذا هو عادةً الطريقة التي تريد استخدامها بها. يجب عليك تحديد u أو g أو o إذا كنت تستخدم وضعًا رمزيًا. راجع قسم الأمثلة للحصول على بعض الأمثلة التوضيحية.

-perm /وضع

يتم تعيين أي من بتات الأذونات المحددة في الوضع (mode) للملف. يتم قبول الأوضاع الرمزية في هذا الشكل. يجب عليك تحديد u أو g أو o إذا كنت تستخدم وضعًا رمزيًا. راجع قسم الأمثلة للحصول على بعض الأمثلة التوضيحية. إذا لم يتم تعيين أي من بتات الأذونات في الوضع (mode)، فسوف يطابق هذا الاختبار أي ملف (الفكرة هنا هي أن يكون متسقًا مع سلوك -perm -000).


-perm +mode

لم تعد مدعومة (وقد تم إيقافها منذ عام 2005). استخدم -perm /mode بدلاً من ذلك.

-readable

يطابق الملفات التي يمكن قراءتها بواسطة المستخدم الحالي. يأخذ هذا في الاعتبار قوائم التحكم في الوصول وخصائص الأذونات الأخرى التي يتجاهلها اختبار -perm. يستخدم هذا الاختبار استدعاء النظام access(2)، ويمكن خداعه بواسطة خوادم NFS التي تستخدم تعيين معرف المستخدم (أو تقليل صلاحيات المستخدم الجذر)، نظرًا لأن العديد من الأنظمة تنفذ access(2) في نواة العميل وبالتالي لا يمكنها استخدام معلومات تعيين معرف المستخدم الموجودة على الخادم.

-regex pattern
يطابق اسم الملف النمط العادي (regular expression). هذا يطابق المسار بأكمله، وليس بحثًا. على سبيل المثال، لمطابقة ملف باسم ./fubar3، يمكنك استخدام التعبير العادي `.*bar.' أو `.*b.*3'، ولكن ليس `f.*r3'. التعبيرات العادية التي يفهمها الأمر find هي افتراضيًا تعبيرات Emacs العادية، ولكن يمكن تغيير ذلك باستخدام الخيار -regextype.

-samefile name

يشير الملف إلى نفس inode الخاص بـ name. عندما يكون الخيار -L فعالًا، يمكن أن يشمل ذلك الروابط الرمزية.

-size n[cwbkMG]

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

`b'    للمجموعات ذات 512 بايت (هذا هو الافتراضي إذا لم يتم استخدام أي لاحقة)

`c'    للبايت

`w'    للكلمات ذات البايتين

`k'    للكيلوبايت (KiB، وحدات من 1024 بايت)

`M'    للميجابايت (MiB، وحدات من 1024 * 1024 = 1048576 بايت)

`G'    للجيجابايت (GiB، وحدات من 1024 * 1024 * 1024 = 1073741824 بايت)

الحجم هو ببساطة العضو st_size في هيكل stat الذي تم ملؤه بواسطة استدعاء النظام lstat (أو stat)، مع التقريب إلى الأعلى كما هو موضح أعلاه. بمعنى آخر، فإنه متوافق مع النتيجة التي تحصل عليها من ls -l. ضع في اعتبارك أن المحددات %k' و%b' في الخيار -printf تتعامل مع الملفات المتفرقة بشكل مختلف. تشير اللاحقة `b' دائمًا إلى مجموعات 512 بايت وليس مجموعات 1024 بايت، وهو أمر مختلف عن سلوك الخيار -ls.

تشير البادئات + و - إلى أكبر من وأقل من، كما هو معتاد؛ أي أن الحجم الدقيق لـ n وحدات لا يتطابق. ضع في اعتبارك أن الحجم يتم تقريبه إلى الوحدة التالية. لذلك، -size -1M لا يساوي -size -1048576c. يطابق الأول الملفات الفارغة فقط، بينما يطابق الثاني الملفات من 0 إلى 1,048,575 بايت.

-true

دائمًا ما تكون صحيحة.

-type c

الملف من النوع c:

b      وحدة تخزين (buffered) خاصة

c      وحدة تخزين خاصة (unbuffered)

d      دليل

p      أنبوب مُسمى (FIFO)

f      ملف عادي

l      رابط رمزي؛ هذا لا يكون صحيحًا أبدًا إذا كان الخيار -L أو الخيار -follow فعالًا، إلا إذا كان الرابط الرمزي معطلاً. إذا كنت تريد البحث عن الروابط الرمزية عندما يكون الخيار -L فعالًا، فاستخدم -xtype.

s      مقبس

D      باب (نظام التشغيل سولاريس)

للبحث عن أكثر من نوع واحد في وقت واحد، يمكنك توفير قائمة الأنواع المجمعة مفصولة بفاصلة , (امتداد GNU).

-uid n يكون معرف المستخدم الرقمي للملف أقل من أو أكبر من أو مساويًا لـ n.

-used n
تم الوصول إلى الملف قبل أقل من أو أكثر من أو بالضبط n يومًا بعد آخر مرة تم فيها تغيير حالته.

-user uname
الملف مملوك للمستخدم uname (يُسمح بمعرف المستخدم الرقمي).

-wholename pattern
انظر -path. هذا البديل أقل قابلية للنقل من -path.

-writable
يطابق الملفات التي يمكن للمستخدم الحالي الكتابة إليها. يأخذ هذا في الاعتبار قوائم التحكم في الوصول وآثار الأذونات الأخرى التي يتجاهلها اختبار -perm. يستخدم هذا الاختبار
استدعاء النظام access(2)، ويمكن أن يتم خداعه بواسطة خوادم NFS التي تقوم بتعيين معرف المستخدم
(أو تقليل صلاحيات المستخدم الجذر)، نظرًا لأن العديد من الأنظمة تنفذ access(2) في نواة العميل ولا يمكنها
الاستفادة من معلومات تعيين معرف المستخدم الموجودة على الخادم.

-xtype c
نفس -type ما لم يكن الملف رابطًا رمزيًا. بالنسبة للروابط الرمزية: إذا تم تحديد الخيار -H أو -P، يكون صحيحًا إذا كان الملف رابطًا لملف من النوع c؛ إذا تم إعطاء الخيار -L، يكون صحيحًا إذا كان c هو `l`. بمعنى آخر، بالنسبة للروابط الرمزية، يتحقق -xtype من نوع الملف الذي لا يتحقق منه -type. إذا كان الرابط الرمزي معطلاً (لأنه يشير إلى شيء غير موجود أو يشير إلى نفسه)، فسوف يتصرف -xtype بنفس طريقة -type.

-context pattern
(خاص بـ SELinux فقط) سياق الأمان للملف يطابق النمط العام.

الإجراءات

-delete
حذف الملفات أو الدلائل؛ صحيح إذا نجح الحذف. إذا فشل الحذف، يتم إصدار رسالة خطأ وسيصبح حالة الخروج الخاصة بـ find غير صفرية (عندما تنتهي في النهاية).

تحذير: لا تنس أن find يقوم بتقييم سطر الأوامر كتعبير، لذا فإن وضع -delete أولاً سيجعل find يحاول حذف كل شيء أسفل نقاط البداية التي حددتها.

يؤدي استخدام إجراء -delete على سطر الأوامر تلقائيًا إلى تشغيل الخيار -depth. وبدوره، يجعل -depth الخيار -prune غير فعال، وبالتالي لا يمكن استخدام إجراء -delete بشكل مفيد مع -prune.

غالبًا ما يرغب المستخدم في اختبار سطر أوامر find باستخدام -print قبل إضافة -delete
للتشغيل الفعلي للحذف. لتجنب النتائج غير المتوقعة، من الأفضل عادةً تذكر
استخدام -depth بشكل صريح أثناء عمليات الاختبار الأولية.

سيفشل إجراء -delete في حذف دليل ما ما لم يكن فارغًا.

بالتزامن مع الخيار -ignore_readdir_race، سيتجاهل find الأخطاء الخاصة بإجراء -delete في حالة اختفاء الملف منذ قراءة الدليل الأصل. لن يقوم بإخراج رسالة تشخيصية، ولن يغير حالة الخروج إلى قيمة غير صفرية، وستكون قيمة الإرجاع الخاصة بإجراء -delete صحيحة.

-exec command ;
تنفيذ الأمر؛ صحيح إذا تم إرجاع الحالة 0. يتم اعتبار جميع الوسائط التالية لـ find وسائط للأمر حتى يتم العثور على وسيطة تتكون من `;`.
يتم استبدال السلسلة `{}` باسم الملف الحالي الذي تتم معالجته في كل مكان يظهر فيه
في وسائط الأمر، وليس فقط في الوسائط التي تظهر فيها بمفردها، كما هو الحال في بعض إصدارات find. قد تحتاج كلتا هاتين البنيتين إلى الهروب منها (باستخدام `\`) أو وضعها بين علامتي اقتباس لحمايتهما من التوسع بواسطة shell. راجع قسم الأمثلة للحصول على أمثلة على استخدام خيار -exec. يتم تشغيل الأمر المحدد مرة واحدة لكل ملف مطابق.
يتم تنفيذ الأمر في الدليل الذي بدأ منه. هناك مشاكل أمنية لا مفر منها تحيط باستخدام إجراء -exec؛ يجب عليك استخدام خيار -execdir بدلاً من ذلك.

-exec command {} +
يقوم هذا المتغير من إجراء -exec بتشغيل الأمر المحدد على الملفات المحددة، ولكن يتم إنشاء سطر الأوامر عن طريق إلحاق اسم كل ملف محدد في النهاية؛ وسيكون العدد الإجمالي لاستدعاءات الأمر أقل بكثير من عدد الملفات المطابقة. يتم إنشاء سطر الأوامر بنفس الطريقة التي ينشئ بها xargs سطور الأوامر الخاصة به. يُسمح بمثيل واحد فقط من `{}' داخل الأمر، ويجب أن يظهر في النهاية، مباشرةً قبل `+'; يجب إلغاء تفسيره (باستخدام `\') أو وضعه بين علامتي اقتباس لحمايته من تفسيره بواسطة shell. يتم تنفيذ الأمر في الدليل الذي بدأت فيه عملية البحث. إذا أرجع أي استدعاء بالصيغة `+' قيمة غير صفرية كحالة خروج، فسوف تُرجع find قيمة خروج غير صفرية. إذا واجهت find خطأً، فقد يؤدي ذلك في بعض الأحيان إلى إنهاء فوري، لذلك قد لا يتم تنفيذ بعض الأوامر المعلقة على الإطلاق. لهذا السبب، قد لا يؤدي استخدام `-exec my-command ... {} + -quit` إلى تشغيل الأمر `my-command` بالفعل. يُرجع هذا المتغير من -exec دائمًا القيمة true.

-execdir command ;

-execdir command {} +
يشبه -exec، ولكن يتم تشغيل الأمر المحدد من الدليل الفرعي الذي يحتوي على الملف المطابق، وهو ليس عادةً الدليل الذي بدأت فيه عملية البحث. كما هو الحال مع -exec، يجب وضع `{}` بين علامتي اقتباس إذا تم استدعاء find من shell. هذه طريقة أكثر أمانًا لاستدعاء الأوامر، لأنها تتجنب ظروف السباق أثناء تحديد مسارات الملفات المطابقة. كما هو الحال مع إجراء -exec، ستقوم الصيغة `+' من -execdir بإنشاء سطر أوامر لمعالجة أكثر من ملف مطابق، ولكن أي استدعاء معين للأمر سيقوم فقط بإدراج الملفات الموجودة في نفس الدليل الفرعي. إذا كنت تستخدم هذا الخيار، فيجب عليك التأكد من أن متغير بيئة PATH الخاص بك لا يشير إلى `.'; وإلا، فيمكن للمهاجم تشغيل أي أوامر يريده عن طريق ترك ملف مُسمى بشكل مناسب في دليل ستعمل فيه -execdir. ينطبق نفس الشيء على وجود إدخالات في PATH تكون فارغة أو ليست أسماء أدلة مطلقة. إذا أرجع أي استدعاء بالصيغة `+' قيمة غير صفرية كحالة خروج، فسوف تُرجع find قيمة خروج غير صفرية. إذا واجهت find خطأً، فقد يؤدي ذلك في بعض الأحيان إلى إنهاء فوري، لذلك قد لا يتم تنفيذ بعض الأوامر المعلقة على الإطلاق. تعتمد نتيجة الإجراء على ما إذا كان يتم استخدام الصيغة `+' أو `;`، حيث تُرجع -execdir command {} + دائمًا القيمة true، بينما تُرجع -execdir command {} ; القيمة true فقط إذا أرجع الأمر القيمة 0.

-fls file

صحيح؛ يشبه -ls ولكن يكتب إلى ملف مثل -fprint. يتم دائمًا إنشاء ملف الإخراج، حتى إذا لم يتم استيفاء الشرط مطلقًا. انظر قسم "أسماء الملفات غير العادية" للحصول على معلومات حول كيفية التعامل مع الأحرف غير العادية في أسماء الملفات.

-fprint file

صحيح؛ اطبع الاسم الكامل للملف في الملف المحدد. إذا لم يكن الملف موجودًا عند تشغيل الأمر find، فسيتم إنشاؤه؛ إذا كان موجودًا، فسيتم اقتطاعه. يتم التعامل مع أسماء الملفات /dev/stdout و /dev/stderr بشكل خاص؛ فهي تشير إلى الإخراج القياسي وإخراج الخطأ القياسي، على التوالي. يتم دائمًا إنشاء ملف الإخراج، حتى إذا لم يتم استيفاء الشرط مطلقًا. انظر قسم "أسماء الملفات غير العادية" للحصول على معلومات حول كيفية التعامل مع الأحرف غير العادية في أسماء الملفات.

-fprint0 file

صحيح؛ يشبه -print0 ولكن يكتب إلى ملف مثل -fprint. يتم دائمًا إنشاء ملف الإخراج، حتى إذا لم يتم استيفاء الشرط مطلقًا. انظر قسم "أسماء الملفات غير العادية" للحصول على معلومات حول كيفية التعامل مع الأحرف غير العادية في أسماء الملفات.

-fprintf file format

صحيح؛ يشبه -printf ولكن يكتب إلى ملف مثل -fprint. يتم دائمًا إنشاء ملف الإخراج، حتى إذا لم يتم استيفاء الشرط مطلقًا. انظر قسم "أسماء الملفات غير العادية" للحصول على معلومات حول كيفية التعامل مع الأحرف غير العادية في أسماء الملفات.

-ls    صحيح؛ قم بإدراج الملف الحالي بتنسيق `ls -dils` على الإخراج القياسي. يتم حساب عدد الكتل بوحدات 1 كيلوبايت، ما لم يتم تعيين متغير البيئة `POSIXLY_CORRECT`، وفي هذه الحالة يتم استخدام كتل 512 بايت. انظر قسم "أسماء الملفات غير العادية" للحصول على معلومات حول كيفية التعامل مع الأحرف غير العادية في أسماء الملفات.

-ok command ;

يشبه -exec ولكن يطلب من المستخدم أولاً. إذا وافق المستخدم، قم بتشغيل الأمر. وإلا، فأرجع قيمة false. إذا تم تشغيل الأمر، فسيتم إعادة توجيه مدخلاته القياسية من /dev/null. لا يمكن تحديد هذا الإجراء مع خيار -files0-from.

يتم مطابقة الاستجابة للموجه مقابل زوج من التعبيرات العادية لتحديد ما إذا كانت استجابة إيجابية أو سلبية. يتم الحصول على هذا التعبير العادي من النظام إذا تم تعيين متغير البيئة POSIXLY_CORRECT، أو من ترجمات الرسائل الخاصة بـ find. إذا لم يكن لدى النظام تعريف مناسب، فسيتم استخدام تعريف find الخاص به. على أي حال، سيؤثر متغير البيئة LC_CTYPE (فئات الأحرف) و LC_COLLATE (نطاقات الأحرف وفئات التكافؤ) على تفسير التعبير العادي نفسه.

-okdir command ;

يشبه -execdir ولكنه يطلب من المستخدم أولاً بنفس الطريقة التي يتم بها ذلك مع -ok. إذا لم يوافق المستخدم، فما عليك سوى إرجاع قيمة false. إذا تم تشغيل الأمر، فسيتم إعادة توجيه مدخلاته القياسية من /dev/null. لا يمكن تحديد هذا الإجراء مع خيار -files0-from.

-print صحيح؛ اطبع الاسم الكامل للملف على الإخراج القياسي، متبوعًا بسطر جديد. إذا كنت تقوم بتمرير إخراج `find` إلى برنامج آخر، وهناك أدنى احتمال بأن الملفات التي تبحث عنها قد تحتوي على سطر جديد، فيجب عليك التفكير بجدية في استخدام خيار `-print0` بدلاً من `-print`. انظر قسم "أسماء الملفات غير العادية" للحصول على معلومات حول كيفية التعامل مع الأحرف غير العادية في أسماء الملفات.

-print0

صحيح؛ اطبع اسم الملف بالكامل على الإخراج القياسي، متبوعًا بحرف فارغ (بدلاً من حرف السطر الجديد الذي تستخدمه -print). يسمح هذا بفسر أسماء الملفات التي تحتوي على أسطر جديدة أو أنواع أخرى من المسافات البيضاء بشكل صحيح بواسطة البرامج التي تعالج إخراج الأمر find. يتوافق هذا الخيار مع خيار -0 الخاص بالأمر xargs.

-printf format

صحيح؛ اطبع التنسيق على الإخراج القياسي، مع تفسير تسلسلات الهروب \ والتوجيهات %. يمكن تحديد عرض الحقول والدقة كما هو الحال في وظيفة printf(3) في لغة C. يرجى ملاحظة أن العديد من الحقول تتم طباعتها كـ %s بدلاً من %d، وقد يعني هذا أن العلامات قد لا تعمل كما هو متوقع. وهذا يعني أيضًا أن العلامة '-' تعمل (فهي تجبر الحقول على أن تكون محاذية لليسار). على عكس -print، لا تضيف -printf سطرًا جديدًا في نهاية السلسلة. التسلسلات والتوجيهات هي:

\a     جرس تنبيه.

\b     مسافة للخلف.

\c     توقف عن الطباعة من هذا التنسيق على الفور وقم بإفراغ الإخراج.

\f     تغذية النموذج.

\n     سطر جديد.

\r     إرجاع السطر.

\t     مسافة أفقية.

\v     مسافة رأسية.

\0     ASCII NUL.

\\     حرف شرطة مائلة حرفيًا (`\`).

\NNN   الحرف الذي يكون رمز ASCII الخاص به هو NNN (ثماني).

يعامل حرف `\` متبوعًا بأي حرف آخر كحرف عادي، لذلك تتم طباعة كليهما.

%%     علامة مئوية حرفية.

%a     وقت آخر وصول للملف بالتنسيق الذي تُرجعه وظيفة ctime(3) في لغة C.

%Ak    وقت آخر وصول للملف بالتنسيق المحدد بواسطة k، وهو إما `'` أو توجيه لوظيفة strftime(3) في لغة C. يعرض ما يلي قائمة غير مكتملة بالقيم المحتملة لـ k. يرجى الرجوع إلى وثائق strftime(3) للحصول على القائمة الكاملة. قد لا تكون بعض أحرف مواصفات التحويل متاحة على جميع الأنظمة، بسبب الاختلافات في تطبيق وظيفة مكتبة strftime(3).

@      الثواني منذ 1 يناير 1970، 00:00 بتوقيت جرينتش، مع جزء كسري.

حقول الوقت:

H      الساعة (00..23)

I      الساعة (01..12)

k      الساعة (0..23)

l      الساعة (1..12)

M      الدقيقة (00..59)

p      AM أو PM الخاص بالإعدادات المحلية

r      الوقت، 12 ساعة (hh:mm:ss [AP]M)

S      الثانية (00.00 .. 61.00). يوجد جزء كسري.

T      الوقت، 24 ساعة (hh:mm:ss.xxxxxxxxxx)

+      التاريخ والوقت، مفصولان بـ `+`، على سبيل المثال `2004-04-28+22:22:05.0`. هذا امتداد GNU. يُعطى الوقت في المنطقة الزمنية الحالية (والتي قد تتأثر بتعيين متغير بيئة TZ). يتضمن حقل الثواني جزءًا كسريًا.

X      تمثيل الوقت الخاص بالإعدادات المحلية (H:M:S). يتضمن حقل الثواني جزءًا كسريًا.

Z      المنطقة الزمنية (مثل، EDT)، أو لا شيء إذا لم يكن من الممكن تحديد المنطقة الزمنية.

حقول التاريخ:

a      اليوم من الأسبوع المختصر (أحد..سبت)

A      اليوم الكامل من الأسبوع، بطول متغير (الأحد..السبت)

b      الشهر المختصر (يناير..ديسمبر)

B      الشهر الكامل، بطول متغير (يناير..ديسمبر)

c      تاريخ ووقت الموقع (السبت 04 نوفمبر 12:02:33 بتوقيت شرق الولايات المتحدة 1989). التنسيق هو نفسه المستخدم في `ctime(3)`، ولذلك للحفاظ على التوافق مع هذا التنسيق، لا توجد قيمة عشرية في حقل الثواني.

d      يوم الشهر (01..31)

D      التاريخ (شهر/يوم/سنة)

F      التاريخ (سنة-شهر-يوم)

h      نفس `b`

j      يوم السنة (001..366)

m      الشهر (01..12)

U      رقم أسبوع السنة، حيث الأحد هو أول يوم في الأسبوع (00..53)

w      يوم الأسبوع (0..6)

W      رقم أسبوع السنة، حيث الاثنين هو أول يوم في الأسبوع (00..53)

x      تنسيق تاريخ الموقع (شهر/يوم/سنة)

y      آخر رقمين من السنة (00..99)

Y      السنة (1970...)

%b     كمية مساحة القرص المستخدمة لهذا الملف بوحدات 512 بايت. نظرًا لأن مساحة القرص يتم تخصيصها في مضاعفات حجم كتلة نظام الملفات، فإن هذا عادة ما يكون أكبر من %s/512، ولكن يمكن أن يكون أيضًا أصغر إذا كان الملف ملفًا مبعثرًا.

%Bk    وقت ميلاد الملف، أي وقت إنشائه، بالتنسيق المحدد بواسطة `k`، وهو نفس التنسيق المستخدم لـ `%A`. ينتج هذا التوجيه سلسلة فارغة إذا كان نظام التشغيل أو نظام الملفات الأساسي لا يدعمان أوقات الميلاد.

%c     وقت آخر تغيير في حالة الملف بالتنسيق الذي يتم إرجاعه بواسطة دالة `ctime(3)` في لغة C.

%Ck    وقت آخر تغيير في حالة الملف بالتنسيق المحدد بواسطة `k`، وهو نفس التنسيق المستخدم لـ `%A`.

%d     عمق الملف في شجرة الدليل؛ 0 يعني أن الملف هو نقطة بداية.

%D     رقم الجهاز الذي يوجد عليه الملف (حقل `st_dev` في هيكل `stat`)، بالصيغة العشرية.

%f     اطبع الاسم الأساسي؛ اسم الملف مع إزالة أي أدلة بادئة (العنصر الأخير فقط). بالنسبة لـ `/`، تكون النتيجة `/`. راجع قسم الأمثلة للحصول على مثال.

%F     نوع نظام الملفات الذي يوجد عليه الملف؛ يمكن استخدام هذه القيمة لـ `-fstype`.

%g     اسم مجموعة الملف، أو رقم مجموعة معرفي إذا لم يكن للمجموعة اسم.

%G     رقم مجموعة الملف العددي.

%h     الدليل؛ الأدلة البادئة في اسم الملف (جميع العناصر باستثناء الأخير). إذا كان اسم الملف لا يحتوي على شرطات مائلة (لأنه في الدليل الحالي)، فإن المحدد `%h` يتوسع إلى `.`. بالنسبة للملفات التي هي نفسها أدلة وتحتوي على شرطة مائلة (بما في ذلك `/`)، يتوسع `%h` إلى سلسلة فارغة. راجع قسم الأمثلة للحصول على مثال.

%H     نقطة البداية التي تم العثور عليها عليها الملف.

%i     رقم inode للملف (بالصيغة العشرية).

%k     كمية مساحة القرص المستخدمة لهذا الملف بوحدات 1 كيلوبايت. نظرًا لأن مساحة القرص يتم تخصيصها في مضاعفات حجم كتلة نظام الملفات، فإن هذا عادة ما يكون أكبر من %s/1024، ولكن يمكن أن يكون أيضًا أصغر إذا كان الملف ملفًا مبعثرًا.

%l     هدف الرابط الرمزي (سلسلة فارغة إذا لم يكن الملف رابطًا رمزيًا).

%m     بتات أذونات الملف (بالصيغة الثمانية). يستخدم هذا الخيار "الأرقام التقليدية" التي تستخدمها معظم تطبيقات Unix، ولكن إذا كان تطبيقك يستخدم ترتيبًا غير عادي لأرقام الأذونات الثمانية، فسترى اختلافًا بين القيمة الفعلية لوضع الملف والإخراج الخاص بـ `%m`. عادة ما سترغب في الحصول على صفر بادئ في هذا الرقم، وللقيام بذلك، يجب عليك استخدام العلامة `#` (على سبيل المثال، `%#m`).

%M  أذونات الملف (بالشكل الرمزي، كما هو الحال في الأمر `ls`). هذا التوجيه مدعوم في `findutils` الإصدار 4.2.5 والإصدارات الأحدث.

%n  عدد الروابط الصلبة للملف.

%p  اسم الملف.

%P  اسم الملف مع إزالة اسم نقطة البداية التي تم العثور عليه تحتها.

%s  حجم الملف بالبايت.

%S  تفرق الملف. يتم حسابه على أنه (BLOCKSIZE * st_blocks / st_size). القيمة الدقيقة التي ستحصل عليها لملف عادي بطول معين تعتمد على النظام. ومع ذلك، عادةً ما يكون للملفات المتفرقة قيم أقل من 1.0، وقد يكون للملفات التي تستخدم الكتل غير المباشرة قيمة أكبر من 1.0. بشكل عام، يعتمد عدد الكتل المستخدمة بواسطة الملف على نظام الملفات. القيمة المستخدمة لـ BLOCKSIZE تعتمد على النظام، ولكنها عادةً ما تكون 512 بايت. إذا كان حجم الملف صفرًا، فإن القيمة المطبوعة غير محددة. على الأنظمة التي تفتقر إلى دعم `st_blocks`، يُفترض أن يكون تفرق الملف هو 1.0.

%t  آخر وقت لتعديل الملف بالتنسيق الذي يتم إرجاعه بواسطة الدالة `ctime(3)` في لغة C.

%Tk آخر وقت لتعديل الملف بالتنسيق المحدد بواسطة `k`، وهو نفسه المستخدم في `%A`.

%u  اسم مستخدم الملف، أو معرف المستخدم الرقمي إذا لم يكن للمستخدم اسم.

%U  معرف المستخدم الرقمي للملف.

%y  نوع الملف (كما في الأمر `ls -l`)، `U` = نوع غير معروف (لا ينبغي أن يحدث).

%Y  نوع الملف (كما في `%y`)، بالإضافة إلى تتبع الروابط الرمزية: `L` = حلقة، `N` = غير موجود، `?` لأي خطأ آخر عند تحديد نوع هدف الرابط الرمزي.

%Z  (خاص بـ SELinux فقط) سياق أمان الملف.

%{ %[ %(
محفوظ للاستخدام المستقبلي.

تتم تجاهل الأحرف التي تبدأ بـ `%` متبوعة بأي حرف آخر، ولكن يتم طباعة الحرف الآخر (لا تعتمد على ذلك، حيث قد يتم تقديم أحرف تنسيق إضافية). قد يتسبب وجود `%` في نهاية وسيطة التنسيق في سلوك غير محدد، حيث لا يوجد حرف يليه. في بعض اللغات، قد يخفي مفاتيح بابك، بينما في لغات أخرى قد يزيل الصفحة الأخيرة من الرواية التي تقرأها.

يدعم التوجيهان %m و %d العلامات # و 0 و +، ولكن التوجيهات الأخرى لا تدعم هذه العلامات، حتى لو كانت تطبع أرقامًا. تشمل التوجيهات الرقمية التي لا تدعم هذه العلامات: G و U و b و D و k و n. يتم دعم علامة التنسيق '-' وتغيّر محاذاة الحقل من محاذاة لليمين (وهو الافتراضي) إلى محاذاة لليسار.

راجع قسم "أسماء الملفات غير العادية" للحصول على معلومات حول كيفية التعامل مع الأحرف غير العادية في أسماء الملفات.

-prune  صحيح؛ إذا كان الملف دليلًا، فلا تنزل إلى داخله. إذا تم تقديم الخيار `-depth`، فلن يكون للخيار `-prune` أي تأثير. نظرًا لأن الخيار `-delete` يعني ضمنيًا الخيار `-depth`، فلا يمكنك استخدام الخيارين `-prune` و `-delete` معًا بشكل مفيد. على سبيل المثال، لتخطي الدليل `src/emacs` وجميع الملفات والأدلة الموجودة تحته، وطباعة أسماء الملفات الأخرى التي تم العثور عليها، يمكنك القيام بذلك:
```
find . -path ./src/emacs -prune -o -print
```

-quit: يخرج فورًا (مع قيمة إرجاع صفر إذا لم تحدث أخطاء). هذا يختلف عن -prune لأن -prune يطبق فقط على محتويات الأدلة التي تم حذفها، بينما يقوم -quit ببساطة بإيقاف البحث فورًا. لن يتم ترك أي عمليات فرعية قيد التشغيل. يتم تنفيذ أي أسطر أوامر تم إنشاؤها بواسطة -exec ... + أو -execdir ... + قبل الخروج من البرنامج. بعد تنفيذ -quit، لن تتم معالجة أي ملفات أخرى محددة في سطر الأوامر. على سبيل المثال، `find /tmp/foo /tmp/bar -print -quit` سيطبع فقط `/tmp/foo`.

أحد الاستخدامات الشائعة لـ -quit هو إيقاف البحث في نظام الملفات بمجرد العثور على ما نريده. على سبيل المثال، إذا أردنا العثور على ملف واحد فقط، يمكننا القيام بذلك:
find / -name needle -print -quit

المعاملات

مدرجة بترتيب تناقص الأسبقية:

(expr)
فرض الأسبقية. نظرًا لأن الأقواس لها معنى خاص في shell، فستحتاج عادةً إلى اقتباسها. تستخدم العديد من الأمثلة في هذه الصفحة استخدام شرطات مائلة للخلف لهذا الغرض: `\(...\)' بدلاً من `(...)`.

! expr: صحيح إذا كان التعبير expr خاطئًا. عادةً ما تحتاج هذه العلامة أيضًا إلى الحماية من التفسير بواسطة shell.

-not expr:
نفس معنى ! expr، ولكنه غير متوافق مع معيار POSIX.

expr1 expr2:
يتم التعامل مع تعبيرين متتاليين على أنهما متصلان بمعامل ضمني -a؛ ولا يتم تقييم expr2 إذا كان expr1 خاطئًا.

expr1 -a expr2:
نفس معنى expr1 expr2.

expr1 -and expr2:
نفس معنى expr1 expr2، ولكنه غير متوافق مع معيار POSIX.

expr1 -o expr2:
أو؛ لا يتم تقييم expr2 إذا كان expr1 صحيحًا.

expr1 -or expr2:
نفس معنى expr1 -o expr2، ولكنه غير متوافق مع معيار POSIX.

expr1, expr2:
قائمة؛ يتم دائمًا تقييم كل من expr1 و expr2. يتم تجاهل قيمة expr1؛ وتكون قيمة القائمة هي قيمة expr2. يمكن أن يكون عامل التشغيل "," مفيدًا للبحث عن أنواع مختلفة من العناصر، ولكن مع عبور تسلسل هرمي نظام الملفات مرة واحدة فقط. يمكن استخدام الإجراء -fprintf لإدراج العناصر المتطابقة المختلفة في ملفات إخراج مختلفة.

يرجى ملاحظة أن -a، عند تحديدها بشكل ضمني (على سبيل المثال عن طريق ظهور اختبارين بدون وجود عامل تشغيل صريح بينهما) أو بشكل صريح، لها أسبقية أعلى من -o. هذا يعني أن `find . -name afile -o -name bfile -print` لن يطبع أبدًا afile.

أسماء الملفات غير العادية

تؤدي العديد من الإجراءات التي يقوم بها find إلى طباعة بيانات تخضع لسيطرة مستخدمين آخرين. ويشمل ذلك أسماء الملفات والأحجام وأوقات التعديل وما إلى ذلك. تعتبر أسماء الملفات مشكلة محتملة لأنها يمكن أن تحتوي على أي حرف باستثناء \0' و/'. يمكن أن تؤدي الأحرف غير العادية في أسماء الملفات إلى حدوث أشياء غير متوقعة وغير مرغوب فيها في جهازك الطرفي (على سبيل المثال، تغيير إعدادات مفاتيح الوظائف في بعض الأجهزة الطرفية). يتم التعامل مع الأحرف غير العادية بشكل مختلف بواسطة الإجراءات المختلفة، كما هو موضح أدناه.


-print0, -fprint0

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

-ls, -fls

يتم دائمًا إلغاء الأحرف غير العادية. يتم طباعة المسافات والشرطات المائلة للخلف وعلامات الاقتباس المزدوجة باستخدام طريقة إلغاء الأحرف على طراز C (على سبيل المثال `\f'، `\"'). تتم طباعة الأحرف غير العادية الأخرى باستخدام طريقة إلغاء الأحرف الثماني. تتم طباعة الأحرف الأخرى القابلة للطباعة (بالنسبة لـ -ls و -fls، وهي الأحرف بين الرمز الثماني 041 و 0176) كما هي.

-printf, -fprintf

إذا لم يكن الإخراج متجهًا إلى الطرفية، فإنه تتم طباعته كما هو. وإلا، فإن النتيجة تعتمد على الأمر المستخدم. الأوامر %D و %F و %g و %G و %H و %Y و %y توسع إلى قيم لا تخضع لسيطرة مالكي الملفات، لذلك تتم طباعتها كما هي. الأوامر %a و %b و %c و %d و %i و %k و %m و %M و %n و %s و %t و %u و %U لها قيم تخضع لسيطرة مالكي الملفات ولكن لا يمكن استخدامها لإرسال بيانات عشوائية إلى الطرفية، لذلك تتم طباعتها كما هي. الأوامر %f و %h و %l و %p و %P يتم وضعها بين علامتي اقتباس. يتم إجراء هذا الاقتباس بنفس الطريقة كما هو الحال في GNU ls. هذه ليست نفس آلية الاقتباس المستخدمة لـ -ls و -fls. إذا كنت قادرًا على تحديد التنسيق المراد استخدامه لإخراج الأمر find، فمن الأفضل عمومًا استخدام `\0' كمحدد بدلاً من استخدام سطر جديد، حيث يمكن أن تحتوي أسماء الملفات على مسافات وأحرف سطر جديد. يتم استخدام إعداد متغير البيئة LC_CTYPE لتحديد الأحرف التي تحتاج إلى اقتباس.

-print, -fprint

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

الأوامر -ok و -okdir تطبع اسم الملف الحالي كما هو. قد يتغير هذا في إصدار مستقبلي.

الامتثال للمعايير

لتحقيق أقرب توافق مع معيار POSIX، يجب عليك تعيين متغير البيئة POSIXLY_CORRECT. الخيارات التالية محددة في معيار POSIX (IEEE Std 1003.1-2008، الإصدار 2016):

-H هذا الخيار مدعوم.

-L هذا الخيار مدعوم.

-name هذا الخيار مدعوم، ولكن يعتمد الامتثال لمعيار POSIX على الامتثال لمعيار POSIX لوظيفة fnmatch(3) في النظام. اعتبارًا من findutils-4.2.2، تتطابق الأحرف المميزة في shell (على سبيل المثال، `*' و `?' أو `[]') مع البادئة `.'، لأن تفسير IEEE PASC 126 يتطلب ذلك. هذا تغيير عن الإصدارات السابقة من findutils.

-type مدعوم. يحدد POSIX `b' و `c' و `d' و `l' و `p' و `f' و `s'. يدعم الأمر find أيضًا `D'، الذي يمثل "Door"، حيث يوفر نظام التشغيل هذه الميزة. علاوة على ذلك، يسمح الأمر find بتحديد أنواع متعددة مرة واحدة في قائمة مفصولة بفواصل.

-ok مدعوم. يتم تفسير الاستجابة وفقًا للأنماط `yes' و `no' المحددة عن طريق تعيين متغير البيئة LC_MESSAGES. عند تعيين متغير البيئة POSIXLY_CORRECT، يتم أخذ هذه الأنماط من تعريف النظام للاستجابة الإيجابية (yes) أو السلبية (no). راجع وثائق النظام لوظيفة nl_langinfo(3)، وخاصةً YESEXPR و NOEXPR. عند عدم تعيين POSIXLY_CORRECT، يتم أخذ الأنماط بدلاً من ذلك من كتالوج الرسائل الخاص بالأمر find.

-newer مدعوم. إذا كان الملف المحدد رابطًا رمزيًا، فسيتم إلغاء ربطه دائمًا. هذا يمثل تغييرًا عن السلوك السابق، الذي كان يستخدم وقت الرابط الرمزي ذي الصلة؛ انظر قسم "التاريخ" أدناه.

-perm مدعوم. إذا لم يتم تعيين متغير البيئة POSIXLY_CORRECT، يتم دعم بعض وسيطات الوضع (مثل +a+x) التي ليست صالحة في POSIX من أجل التوافق مع الإصدارات السابقة.

تُدعم الخيارات الأساسية الأخرى: -atime، و -ctime، و -depth، و -exec، و -group، و -links، و -mtime، و -nogroup، و -nouser، و -ok، و -path، و -print، و -prune، و -size، و -user، و -xdev.

يحدد معيار POSIX الأقواس `(`، و `)`، والنفي `!`، وعوامل التشغيل المنطقية AND/OR `-a` و `-o`.

جميع الخيارات والتعبيرات والعوامل الأخرى هي امتدادات تتجاوز معيار POSIX. العديد من هذه الامتدادات ليست فريدة من نوعها في GNU find.

يتطلب معيار POSIX أن يكتشف find الحلقات:

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

تتوافق GNU find مع هذه المتطلبات. غالبًا ما يكون عدد الروابط للدلائل التي تحتوي على إدخالات وهي روابط ثابتة إلى أحد الأسلاف أقل مما ينبغي. يمكن أن يعني هذا أن GNU find سيقوم في بعض الأحيان بتحسين وتجنب زيارة دليل فرعي وهو في الواقع رابط إلى أحد الأسلاف. نظرًا لأن find لا يدخل فعليًا هذا الدليل الفرعي، فيُسمح له بتجنب إصدار رسالة تشخيصية. على الرغم من أن هذا السلوك قد يكون مربكًا بعض الشيء، فمن غير المرجح أن يعتمد أي شخص فعليًا على هذا السلوك. إذا تم إيقاف تشغيل تحسين الأوراق باستخدام `-noleaf`، فسيتم دائمًا فحص إدخال الدليل وستصدر الرسالة التشخيصية عند الاقتضاء. لا يمكن استخدام الروابط الرمزية لإنشاء دورات في نظام الملفات على هذا النحو، ولكن إذا كان الخيار `-L` أو الخيار `-follow` قيد الاستخدام، فسيتم إصدار رسالة تشخيصية عندما يواجه find حلقة من الروابط الرمزية. كما هو الحال مع الحلقات التي تحتوي على روابط ثابتة، غالبًا ما يعني تحسين الأوراق أن find يعرف أنه لا يحتاج إلى استدعاء `stat()` أو `chdir()` في الرابط الرمزي، لذلك غالبًا ما تكون هذه الرسالة التشخيصية غير ضرورية.

يتم دعم الخيار `-d` من أجل التوافق مع أنظمة BSD المختلفة، ولكن يجب عليك استخدام الخيار المتوافق مع POSIX وهو `-depth` بدلاً من ذلك.

المتغير البيئي POSIXLY_CORRECT لا يؤثر على سلوك اختباري -regex أو -iregex لأن هذه الاختبارات غير محددة في معيار POSIX.

المتغيرات البيئية

LANG يوفر قيمة افتراضية للمتغيرات الدولية التي لم يتم تعيينها أو جعلها فارغة.

LC_ALL إذا تم تعيينه إلى قيمة سلسلة غير فارغة، فإنه يلغي قيم جميع المتغيرات الدولية الأخرى.

LC_COLLATE
يحدد معيار POSIX أن هذا المتغير يؤثر على نمط المطابقة المستخدم
لخيار -name. يستخدم GNU find وظيفة المكتبة fnmatch(3)، وبالتالي يعتمد دعم LC_COLLATE على مكتبة النظام. يؤثر هذا المتغير أيضًا على تفسير
الاستجابة لـ -ok؛ في حين أن المتغير LC_MESSAGES يحدد النمط الفعلي المستخدم لتفسير الاستجابة لـ -ok، فإن تفسير أي تعبيرات بين قوسين في هذا النمط سيتأثر بـ LC_COLLATE.

LC_CTYPE
يؤثر هذا المتغير على معالجة فئات الأحرف المستخدمة في التعبيرات العادية
وأيضًا مع اختبار -name، إذا كانت وظيفة المكتبة fnmatch(3) في النظام تدعم ذلك. يؤثر هذا
المتغير أيضًا على تفسير أي فئات أحرف في التعبيرات العادية المستخدمة لتفسير الاستجابة للمطالبة التي يصدرها -ok. سيؤثر المتغير البيئي LC_CTYPE أيضًا على الأحرف التي تعتبر غير قابلة للطباعة عند
طباعة أسماء الملفات؛ انظر القسم "أسماء الملفات غير العادية".

LC_MESSAGES
يحدد اللغة التي سيتم استخدامها للرسائل الدولية. إذا تم تعيين المتغير البيئي POSIXLY_CORRECT، فإنه يحدد أيضًا تفسير الاستجابة
للمطالبة التي يصدرها إجراء -ok.

NLSPATH
يحدد موقع كتالوجات الرسائل الدولية.

PATH يؤثر على الدلائل التي يتم البحث فيها للعثور على الملفات التنفيذية التي يتم استدعاؤها بواسطة -exec و -execdir و -ok و -okdir.

POSIXLY_CORRECT
يحدد حجم الكتلة المستخدم بواسطة -ls و -fls. إذا تم تعيين POSIXLY_CORRECT، فإن الكتل تكون
وحدات بحجم 512 بايت. وإلا، فإنها تكون وحدات بحجم 1024 بايت.

يؤدي تعيين هذا المتغير أيضًا إلى إيقاف تشغيل رسائل التحذير (أي، يعني -nowarn) افتراضيًا، لأن POSIX يتطلب أنه بخلاف الإخراج الخاص بـ -ok، يجب أن تكون جميع الرسائل المطبوعة على
stderr تشخيصية ويجب أن تؤدي إلى حالة خروج غير صفرية.

عندما لا يتم تعيين POSIXLY_CORRECT، يتم التعامل مع -perm +zzz تمامًا مثل -perm /zzz إذا لم يكن +zzz وضعًا رمزيًا صالحًا. عندما يتم تعيين POSIXLY_CORRECT، يتم التعامل مع هذه البناءات كخطأ.

عندما يتم تعيين POSIXLY_CORRECT، يتم تفسير الاستجابة للمطالبة التي يصدرها إجراء -ok وفقًا لكتالوج الرسائل الخاص بالنظام، بدلاً من تفسيرها وفقًا لترجمات الرسائل الخاصة بـ find.

TZ يؤثر على المنطقة الزمنية المستخدمة لبعض التوجيهات المتعلقة بالوقت لـ -printf و -fprintf.

أمثلة

نهج بسيط find|xargs

ابحث عن الملفات المسماة core في الدليل /tmp أو تحته وقم بحذفها.

$ find /tmp -name core -type f -print | xargs /bin/rm -f

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


طريقة أكثر أمانًا لـ find -print0 | xargs -0

ابحث عن الملفات المسماة "core" في أو أسفل الدليل /tmp وقم بحذفها، مع معالجة أسماء الملفات بطريقة تتيح التعامل الصحيح مع أسماء الملفات أو الدلائل التي تحتوي على علامات اقتباس مفردة أو مزدوجة، أو مسافات أو أحرف سطر جديد.

$ find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f

يأتي اختبار -name قبل اختبار -type لتجنب الحاجة إلى استدعاء stat(2) لكل ملف.

لاحظ أنه لا يزال هناك تنافس بين الوقت الذي يجتاز فيه find التسلسل الهرمي ويطبع أسماء الملفات المطابقة، والوقت الذي تعمل فيه العملية التي يتم تنفيذها بواسطة xargs مع هذا الملف.

معالجة نقاط بداية عشوائية

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

$ proggy | find -files0-from - -maxdepth 0 -type f -empty

يعني استخدام -files0-from - قراءة أسماء نقاط البداية من الإدخال القياسي، أي من الأنبوب؛ ويضمن -maxdepth 0 أنه سيتم فحص هذه الإدخالات فقط دون الدخول إلى الدلائل (في حالة كان أحد نقاط البداية هو دليل).

تنفيذ أمر لكل ملف

قم بتشغيل الأمر file على كل ملف في أو أسفل الدليل الحالي.

$ find . -type f -exec file '{}' \;

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

في كثير من الحالات، قد يفضل المرء استخدام بناء الجملة -exec ... + أو الأفضل -execdir ... + لتحسين الأداء والأمان.

اجتياز نظام الملفات مرة واحدة فقط - لتنفيذ عملين مختلفين

قم باجتياز نظام الملفات مرة واحدة فقط، وقوم بإدراج الملفات والدلائل التي لديها بت المستخدم (set-user-ID) في /root/suid.txt والملفات الكبيرة في /root/big.txt.

$ find / \
\( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \
\( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)

يستخدم هذا المثال حرف استمرار السطر (\) في السطرين الأولين لإخبار برنامج shell بمتابعة قراءة الأمر في السطر التالي.

البحث عن الملفات حسب العمر

ابحث عن الملفات في الدليل الرئيسي التي تم تعديلها في الأربع والعشرين ساعة الماضية.

$ find $HOME -mtime 0

يعمل هذا الأمر بهذه الطريقة لأن الوقت منذ آخر تعديل لكل ملف يتم تقسيمه على 24 ساعة ويتم تجاهل أي باقٍ. هذا يعني أنه لمطابقة -mtime 0، يجب أن يكون للملف تعديل في الماضي أقل من 24 ساعة.

البحث عن الملفات حسب الأذونات

ابحث عن الملفات التي يمكن تنفيذها ولكن لا يمكن قراءتها.

$ find /sbin /usr/sbin -executable \! -readable -print

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


$ find . -perm 664

الملفات التي تستوفي هذه المعايير ولكن لديها بتات أذونات أخرى (على سبيل المثال، إذا كان بإمكان شخص ما تنفيذ الملف) لن تتم مطابقتها.

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

$ find . -perm -664

سوف يطابق هذا ملفًا له وضع 0777، على سبيل المثال.

ابحث عن الملفات التي يمكن الكتابة إليها من قبل شخص ما (مالكها، أو مجموعتها، أو أي شخص آخر).

$ find . -perm /222

ابحث عن الملفات التي يمكن الكتابة إليها من قبل مالكها أو مجموعتها.

$ find . -perm /220
$ find . -perm /u+w,g+w
$ find . -perm /u=w,g=w

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

ابحث عن الملفات التي يمكن الكتابة إليها من قبل كل من مالكها ومجموعتها.

$ find . -perm -220
$ find . -perm -g+w,u+w

كل هذين الأمرين يفعلان الشيء نفسه.

بحث أكثر تفصيلاً حول الأذونات.

$ find . -perm -444 -perm /222 \! -perm /111
$ find . -perm -a+r -perm /a+w \! -perm /a+x

يبحث كلا هذين الأمرين عن الملفات التي يمكن قراءتها من قبل الجميع (-perm -444 أو -perm -a+r)، والتي تحتوي على بت كتابة واحد على الأقل (-perm /222 أو -perm /a+w) ولكنها ليست قابلة للتنفيذ من قبل أي شخص (! -perm /111 أو ! -perm /a+x على التوالي).

التقليم - حذف الملفات والدلائل

انسخ محتويات /source-dir إلى /dest-dir، ولكن احذف الملفات والدلائل التي تحمل الاسم .snapshot (وأي شيء بداخلها). كما يحذف الملفات أو الدلائل التي ينتهي اسمها بـ '\~'، ولكن ليس محتوياتها.

$ cd /source-dir
$ find . -name .snapshot -prune -o \( \! -name '*~' -print0 \) \
| cpio -pmd0 /dest-dir

التركيب -prune -o ( ... -print0 ) شائع جدًا. الفكرة هنا هي أن التعبير قبل -prune يطابق العناصر التي سيتم حذفها. ومع ذلك، فإن إجراء -prune نفسه يُرجع قيمة صحيحة، لذلك يضمن -o أن يتم تقييم الجانب الأيمن فقط لتلك الدلائل التي لم يتم حذفها (لا يتم حتى زيارة محتويات الدلائل المحذوفة، لذلك تكون غير ذات صلة). التعبير الموجود على الجانب الأيمن من -o موجود بين قوسين فقط للتوضيح. يؤكد هذا أن إجراء -print0 يحدث فقط للعناصر التي لم يتم تطبيق -prune عليها. نظرًا لأن شرط 'and' الافتراضي بين الاختبارات يرتبط بشكل أكثر إحكامًا من -o، فهذا هو الافتراضي على أي حال، ولكن الأقواس تساعد في إظهار ما يحدث.

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

$ find repo/ \
\( -exec test -d '{}/.svn' \; \
-or -exec test -d '{}/.git' \; \
-or -exec test -d '{}/CVS' \; \
\) -print -prune

مثال على المخرجات:

repo/project1/CVS
repo/gnu/project2/.svn
repo/gnu/project3/.svn
repo/gnu/project3/src/.svn
repo/project4/.git

في هذا المثال، يمنع -prune الدخول غير الضروري إلى الدلائل التي تم اكتشافها بالفعل (على سبيل المثال، لا نبحث في project3/src لأننا وجدنا بالفعل project3/.svn)، ولكنه يضمن العثور على الدلائل الشقيقة (مثل project2 و project3).

أمثلة أخرى مفيدة

ابحث عن عدة أنواع من الملفات.

$ find /tmp -type f,d,l

ابحث عن الملفات والدلائل والروابط الرمزية في الدليل /tmp، مع تمرير هذه الأنواع كقائمة مفصولة بفواصل (امتداد GNU)، وهو ما يعادل الطريقة الأطول، ولكنها أكثر قابلية للنقل:

$ find /tmp \( -type f -o -type d -o -type l \)

ابحث عن الملفات التي تحمل الاسم المحدد needle وتوقف فورًا عند العثور على الملف الأول.

$ find / -name needle -print -quit

وضح تفسير التوجيهات التنسيقية %f و %h في الإجراء -printf لبعض الحالات الخاصة. إليك مثال يتضمن بعض المخرجات.

$ find . .. / /tmp /tmp/TRACE compile compile/64/tests/find -maxdepth 0 -printf '[%h][%f]\n'
[.][.]
[.][..]
[][/]
[][tmp]
[/tmp][TRACE]
[.][compile]
[compile/64/tests][find]

حالة الخروج

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

عندما يحدث بعض الخطأ، قد يتوقف الأمر find على الفور، دون إكمال جميع الإجراءات المحددة. على سبيل المثال، قد لا يتم فحص بعض نقاط البداية أو قد لا يتم تنفيذ بعض الاستدعاءات المعلقة للبرامج الخاصة بـ -exec ... {} + أو -execdir ... {} +.

التاريخ

ظهر برنامج find في الإصدار الخامس من نظام التشغيل Unix كجزء من مشروع Programmer's Workbench، وكتبه ديك هاجت. يوفر كتاب دوغ ماكلروي "A Research UNIX Reader: Annotated Excerpts from the Programmer’s Manual, 1971-1986" بعض التفاصيل الإضافية؛ يمكنك قراءته عبر الإنترنت على [https://www.cs.dartmouth.edu/~doug/reader.pdf].

تمت كتابة الأمر find الخاص بـ GNU في الأصل بواسطة إريك ديكر، مع تحسينات من قبل ديفيد ماكنزي وجاي بليت وتيم وود. جاءت فكرة استخدام -print0 و xargs -0 من دان برنشتاين.

التوافق

اعتبارًا من إصدار findutils-4.2.2، تطابق الأحرف الخاصة للصدفة (`*`، `?` أو `[]` على سبيل المثال) المستخدمة في أنماط أسماء الملفات النقطة الأولى (.)، لأن تفسير IEEE POSIX 126 يتطلب ذلك.

اعتبارًا من إصدار findutils-4.3.3، يطابق الخيار -perm /000 الآن جميع الملفات بدلاً من عدم مطابقة أي منها.

تم تنفيذ الطوابع الزمنية بدقة النانو ثانية في إصدار findutils-4.3.3.

اعتبارًا من إصدار findutils-4.3.11، يقوم الإجراء -delete بتعيين حالة الخروج الخاصة بـ find إلى قيمة غير صفرية عند فشله. ومع ذلك، لن يخرج الأمر find على الفور. في السابق، لم تكن حالة الخروج الخاصة بـ find تتأثر بفشل -delete.

الميزة تمت إضافتها في تحدث أيضًا في -files0-from 4.9.0 -newerXY 4.3.3 BSD -D 4.3.1 -O 4.3.1 -readable 4.3.0 -writable 4.3.0 -executable 4.3.0 -regextype 4.2.24 -exec ... + 4.2.12 POSIX -execdir 4.2.12 BSD -okdir 4.2.12 -samefile 4.2.11 -H 4.2.5 POSIX -L 4.2.5 POSIX -P 4.2.5 BSD -delete 4.2.3 -quit 4.2.3 -d 4.2.3 BSD -wholename 4.2.0 -iwholename 4.2.0 -ignore_readdir_race 4.2.0 -fls 4.0 -ilname 3.8 -iname 3.8 -ipath 3.8 -iregex 3.8


تم إزالة الصيغة -perm +MODE في findutils-4.5.12، واستبدالها بـ -perm /MODE. وقد تم إيقاف الصيغة +MODE منذ الإصدار findutils-4.2.21 الذي صدر في عام 2005.

ليست أخطاء

مفاجآت تتعلق بأسبقية المعاملات

الأمر find . -name afile -o -name bfile -print لن يطبع afile مطلقًا لأنه يعادل في الواقع find . -name afile -o \( -name bfile -a -print \). تذكر أن أسبقية المعامل -a أعلى من أسبقية المعامل -o، وعندما لا يتم تحديد أي معامل بين الاختبارات، يتم افتراض -a.

"يجب أن تسبق المسارات التعبير" رسالة الخطأ
$ find . -name \*.c -print
find: يجب أن تسبق المسارات التعبير
find: نمط غير محصور ربما بعد المسند `-name'?

يحدث هذا عندما يمكن للصدفة توسيع النمط \*.c إلى أكثر من اسم ملف موجود في الدليل الحالي، وتمرير أسماء الملفات الناتجة إلى الأمر find على النحو التالي: find . -name frcode.c locate.c word_io.c -print هذا الأمر بالطبع لن يعمل، لأن المسند -name يسمح بنمط واحد فقط كمعامل. بدلاً من ذلك، يجب عليك وضع النمط بين علامتي اقتباس أو إلغاء رمز حرف البدل، مما يسمح لـ find باستخدام النمط مع حرف البدل أثناء البحث عن تطابق اسم الملف بدلاً من أسماء الملفات التي توسعها الصدفة: $ find . -name '*.c' -print $ find . -name *.c -print

الأخطاء

هناك مشاكل أمنية متأصلة في السلوك الذي تحدده معيار POSIX لـ find، والتي لا يمكن إصلاحها. على سبيل المثال، فإن الإجراء -exec غير آمن بطبيعته، ويجب استخدام -execdir بدلاً من ذلك.

لا يؤثر متغير البيئة LC_COLLATE على الإجراء -ok.

الإبلاغ عن الأخطاء

مساعدة GNU findutils عبر الإنترنت: [https://www.gnu.org/software/findutils/#get-help] أبلغ عن أي أخطاء ترجمة إلى [https://translationproject.org/team/]

أبلغ عن أي مشكلة أخرى عبر النموذج الموجود في متتبع أخطاء GNU Savannah: [https://savannah.gnu.org/bugs/?group=findutils] تتم مناقشة الموضوعات العامة المتعلقة بحزمة GNU findutils في قائمة بريدية bug-findutils: [https://lists.gnu.org/mailman/listinfo/bug-findutils]

حقوق النشر

حقوق النشر © 1990–2024 مؤسسة البرمجيات الحرة، Inc. رخصة GPLv3+: GNU GPL الإصدار 3 أو أحدث [https://gnu.org/licenses/gpl.html]. هذا برنامج حر: أنت حر في تغييره وإعادة توزيعه. لا توجد ضمانات، إلى الحد الذي يسمح به القانون.


انظر أيضًا

chmod(1)، locate(1)، ls(1)، updatedb(1)، xargs(1)، lstat(2)، stat(2)، ctime(3) fnmatch(3)، printf(3)، strftime(3)، locatedb(5)، regex(7)

التوثيق الكامل [https://www.gnu.org/software/findutils/find] أو متاح محليًا عبر: info find