| FIND(1) | General Commands Manual | FIND(1) |
الاسم¶
find - ابحث عن الملفات في هيكلية أدلة
موجز¶
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]
الوصف¶
توثق صفحة الدليل هذه نسخة GNU من find. يبحث GNU find في شجرة الأدلة التي تبدأ من كل starting-point (نقطة بداية) معطاة عبر تقييم الـ expression (تعبير) المعطى من اليسار إلى اليمين، وفقًا لقواعد الأسبقية (انظر قسم OPERATORS)، حتى تُعرف النتيجة (الطرف الأيسر خطأ لعمليات and، أو صحيح لعمليات or)، وعند هذه النقطة ينتقل find إلى اسم الملف التالي. إذا لم تُحدد أي نقطة بداية، يُفترض استخدام `.' (الدليل الحالي).
إذا كنت تستخدم find في بيئة تهمك فيها الحماية (على سبيل المثال إذا كنت تستخدمه للبحث في أدلة يمكن للمستخدمين الآخرين الكتابة فيها)، فينبغي قراءة فصل `Security Considerations' في توثيق findutils، المسمى Finding Files والذي يأتي مع findutils. يتضمن ذلك المستند أيضًا تفاصيل ومناقشات أكثر بكثير من صفحة الدليل هذه، لذا قد تجده مصدرًا أكثر فائدة للمعلومات.
الخيارات¶
تتحكم الخيارات -H و -L و -P في التعامل مع الروابط الرمزية. تُعتبر وسائط سطر الأوامر التي تلي هذه الخيارات أسماء لملفات أو أدلة للفحص، وصولاً إلى أول وسيط يبدأ بـ `-'، أو الوسيط `(' أو `!'. يُعتبر ذلك الوسيط وأي وسائط تاليه له بمثابة التعبير الواصف لما سيُبحث عنه. إذا لم تُعطَ أي مسارات، يُستخدم الدليل الحالي. إذا لم يُعطَ أي تعبير، يُستخدم التعبير -print (ولكن ربما ينبغي لك التفكير في استخدام -print0 بدلاً من ذلك، على أي حال).
تتحدث صفحة الدليل هذه عن `الخيارات' ضمن قائمة التعبيرات. تتحكم هذه الخيارات في سلوك find ولكن تُحدد مباشرة بعد آخر اسم مسار. الخيارات الخمسة `الحقيقية' -H، و -L، و -P، و -D، و -O يجب أن تظهر قبل أول اسم مسار، إن وُجدت. نظريًا، يمكن استخدام الشرطة المزدوجة -- للإشارة إلى أن أي وسائط متبقية ليست خيارات، لكن هذا لا يعمل حقًا بسبب الطريقة التي يحدد بها find نهاية وسائط المسارات التالية: فهو يفعل ذلك عبر القراءة حتى يأتي وسيط تعبير (والذي يبدأ أيضًا بـ `-'). الآن، إذا بدأ وسيط مسار بـ `-'، سيعامله find كوسيط تعبير بدلاً من ذلك. لذا، لضمان اعتبار جميع نقاط البداية كذلك، وخاصة لمنع معاملة أنماط البدل (wildcards) التي توسعها صدفة الاستدعاء كتعابير بالخطأ، فمن الأسلم عمومًا بادئة أنماط البدل أو أسماء المسارات المريبة بـ `./' أو استخدام مسارات مطلقة تبدأ بـ '/'. كبديل، من الآمن عمومًا (رغم أنه غير محمول) استخدام خيار GNU المسمى -files0-from لتمرير نقاط بداية عشوائية إلى find.
- -P
- لا تتبع الروابط الرمزية أبدًا. هذا هو السلوك المبدئي. عندما يفحص find أو يطبع معلومات عن الملفات، ويكون الملف رابطًا رمزيًا، تُؤخذ المعلومات المستخدمة من خصائص الرابط الرمزي نفسه.
- -L
- اتبع الروابط الرمزية. عندما يفحص find أو يطبع معلومات عن الملفات، تُؤخذ المعلومات المستخدمة من خصائص الملف الذي يشير إليه الرابط، وليس من الرابط نفسه (ما لم يكن رابطًا رمزيًا معطوبًا أو تعذر على find فحص الملف الذي يشير إليه الرابط). استخدام هذا الخيار يتضمن -noleaf. إذا استخدمت لاحقًا الخيار -P، سيبقى -noleaf ساريًا. إذا كان -L ساريًا واكتشف find رابطًا رمزيًا لدليل فرعي أثناء بحثه، فسيُبحث في الدليل الفرعي الذي يشير إليه الرابط الرمزي.
- عندما يكون الخيار -L ساريًا، سيتطابق محمول (predicate) الـ -type دائمًا مع نوع الملف الذي يشير إليه الرابط الرمزي بدلاً من الرابط نفسه (ما لم يكن الرابط الرمزي معطوبًا). الإجراءات التي قد تسبب عطب الروابط الرمزية أثناء تنفيذ find (مثل -delete) قد تؤدي إلى سلوك مربك. يؤدي استخدام -L إلى جعل محمولات -lname و -ilname تعيد دائماً قيمة 'خطأ'.
- -H
- لا تتبع الروابط الرمزية، إلا أثناء معالجة وسائط سطر الأوامر. عندما يفحص find أو يطبع معلومات عن الملفات، تُؤخذ المعلومات المستخدمة من خصائص الرابط الرمزي نفسه. الاستثناء الوحيد لهذا السلوك هو عندما يكون الملف المحدد في سطر الأوامر رابطًا رمزيًا، ويمكن حل الرابط. في تلك الحالة، تُؤخذ المعلومات المستخدمة مما يشير إليه الرابط (أي يُتبع الرابط). تُستخدم المعلومات الخاصة بالرابط نفسه كبديل إذا تعذر فحص الملف الذي يشير إليه الرابط الرمزي. إذا كان -H ساريًا وكان أحد المسارات المحددة في سطر الأوامر رابطًا رمزيًا لدليل، فسيُفحص محتوى ذلك الدليل (على الرغم من أن -maxdepth 0 سيمنع ذلك بالطبع).
إذا حُدد أكثر من خيار من -H و -L و -P، فإن كل واحد منها يتجاوز الآخرين؛ ويسري مفعول الخيار الأخير ظهورًا في سطر الأوامر. وبما أنه المبدئي، فينبغي اعتبار الخيار -P ساري المفعول ما لم يُحدد -H أو -L.
يقوم GNU find غالبًا بجلب حالة الملفات (stats) أثناء معالجة سطر الأوامر نفسه، قبل بدء أي بحث. تؤثر هذه الخيارات أيضًا على كيفية معالجة تلك الوسائط. تحديدًا، هناك عدد من الاختبارات التي تقارن الملفات المدرجة في سطر الأوامر بملف ندرسه حاليًا. في كل حالة، سيكون الملف المحدد في سطر الأوامر قد فُحص وحُفظت بعض خصائصه. إذا كان الملف المسمى رابطًا رمزيًا في الواقع، وكان الخيار -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
- يطبع ملخصًا يشير إلى عدد مرات نجاح أو فشل كل محمول (predicate).
- search
- تنقل في شجرة الأدلة بإسهاب.
- stat
- اطبع رسائل أثناء فحص الملفات باستخدام استدعاءات النظام stat و lstat. يحاول برنامج find تقليل هذه الاستدعاءات قدر الإمكان.
- tree
- أظهر شجرة التعبير بشكلها الأصلي والمحسن.
- all
- فعل جميع خيارات التنقيح الأخرى (ما عدا help).
- help
- اشرح خيارات التنقيح.
- -Olevel
- يفعل تحسين الاستعلام. يعيد برنامج find ترتيب الاختبارات لتسريع التنفيذ مع الحفاظ على التأثير العام؛ أي أن المحمولات ذات الآثار الجانبية لا يعاد ترتيبها بالنسبة لبعضها البعض. التحسينات التي نُفذت في كل مستوى تحسين هي كما يلي.
- 0
- يعادل مستوى التحسين 1.
- 1
- هذا هو مستوى التحسين المبدئي ويوافق السلوك التقليدي. يعاد ترتيب التعبيرات بحيث تُجرى الاختبارات المعتمدة فقط على أسماء الملفات (على سبيل المثال -name و -regex) أولاً.
- 2
- تُجرى أي اختبارات -type أو -xtype بعد أي اختبارات معتمدة فقط على أسماء الملفات، ولكن قبل أي اختبارات تتطلب معلومات من الآينود (inode). في العديد من نسخ 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 فلن تصدر رسالة خطأ. هذا هو السبب في أن إعادة ترتيب العمليات هذه لا تُنفذ في مستوى التحسين المبدئي.
تعبير¶
جزء سطر الأوامر الذي يلي قائمة نقاط البداية هو الـ expression (التعبير). هذا نوع من مواصفات الاستعلام التي تصف كيفية مطابقتنا للملفات وماذا نفعل بالملفات التي تمت مطابقتها. يتكون التعبير من تسلسل من الأشياء:
- الاختبارات
- تعيد الاختبارات قيمة صواب أو خطأ، عادةً بناءً على خاصية معينة للملف الذي ندرسه. اختبار -empty على سبيل المثال يكون صواباً فقط عندما يكون الملف الحالي فارغاً.
- الإجراءات
- للإجراءات آثار جانبية (مثل طباعة شيء ما على المخرجات القياسية) وتعيد إما صواب أو خطأ، عادةً بناءً على نجاحها من عدمه. إجراء -print على سبيل المثال يطبع اسم الملف الحالي على المخرجات القياسية.
- خيارات شاملة
- تؤثر الخيارات الشاملة على عمل الاختبارات والإجراءات المحددة في أي جزء من سطر الأوامر. تعيد الخيارات الشاملة دائماً قيمة صواب. الخيار -depth على سبيل المثال يجعل find يعبر نظام الملفات بترتيب العمق أولاً.
- الخيارات الموضعية
- تؤثر الخيارات الموضعية فقط على الاختبارات أو الإجراءات التي تليها. تعيد الخيارات الموضعية دائماً قيمة صواب. الخيار -regextype على سبيل المثال هو خيار موضعي، يحدد لهجة التعبير النمطي للتعبيرات النمطية التي تظهر لاحقاً في سطر الأوامر.
- المعاملات
- تربط المعاملات العناصر الأخرى داخل التعبير ببعضها. وهي تشمل على سبيل المثال -o (بمعنى OR المنطقية) و -a (بمعنى AND المنطقية). عند غياب المعامل، يُفترض وجود -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 (انظر SEE ALSO) يشرح معنى والاختلافات بين أنواع التعبيرات النمطية المختلفة. إذا لم تستخدم هذا الخيار، سيتصرف 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
- اقرأ نقاط
البداية من
file بدلاً من
الحصول
عليها من
سطر
الأوامر.
على النقيض
من القيود
المعروفة
لتمرير
نقاط
البداية
عبر وسائط
سطر
الأوامر،
وهي تقييد
عدد أسماء
الملفات،
والغموض
المتأصل في
تعارض
أسماء
الملفات مع
أسماء
الخيارات،
يسمح
استخدام
هذا الخيار
بتمرير عدد
تعسفي من
نقاط
البداية
إلى find
بأمان.
استخدام هذا الخيار وتمرير نقاط البداية في سطر الأوامر أمران متنافيان، ولذلك غير مسموح بهما في نفس الوقت.
وسيط file إلزامي. يمكن استخدام -files0-from - لقراءة قائمة نقاط البداية من تدفق standard input (المدخل القياسي)، ومن أنبوب مثلاً. في هذه الحالة، لا يسمح بالإجراءات -ok و -okdir، لأنها ستتداخل بوضوح مع القراءة من standard input للحصول على تأكيد المستخدم.
يجب فصل نقاط البداية في file بمحارف ASCII NUL. لا يسمح بوجود محرفي NUL متتاليين، أي نقطة بداية باسم ملف طوله صفر، وسوف يؤدي ذلك إلى تشخيص خطأ يليه رمز خروج غير صفري لاحقاً.
في حال كان الـ file المعطى فارغاً، لن يعالج find أي نقطة بداية ولذلك سيخرج فوراً بعد تحليل وسائط البرنامج. هذا على عكس الاستدعاء القياسي حيث يفترض find الدليل الحالي كنقطة بداية إذا لم يُمرر وسيط مسار.
تتم معالجة نقاط البداية كالمعتاد، مثلاً سيقوم find بالدخول العودي إلى الأدلة الفرعية ما لم يُمنع من ذلك. لمعالجة نقاط البداية فقط، يمكن تمرير -maxdepth 0 إضافياً.
ملاحظات إضافية: إذا أُدرج ملف أكثر من مرة في ملف المدخلات، فمن غير المحدد ما إذا كان سيُزار أكثر من مرة. إذا تغير الـ file أثناء تشغيل find، فإن النتيجة غير محددة أيضاً. أخيراً، موضع البحث (seek) داخل الـ file المسمى عند خروج find، سواء كان بـ -quit أو بأي طريقة أخرى، غير محدد أيضاً. المقصود بـ "غير محدد" هنا هو أنه قد يعمل أو لا يعمل أو قد يفعل أي شيء محدد، وأن السلوك قد يتغير من منصة إلى أخرى، أو من إصدار findutils إلى آخر.
- -help, --help
- اطبع ملخصاً لاستخدام سطر أوامر find ثم اخرج.
- -ignore_readdir_race
- عادةً،
سيصدر find
رسالة خطأ
عندما يفشل
في جلب حالة
(stat) الملف. إذا
أعطيت هذا
الخيار
وحُذف ملف
بين الوقت
الذي قرأ
فيه find اسم
الملف من
الدليل
والوقت
الذي حاول
فيه جلب
حالته، فلن
تصدر رسالة
خطأ. ينطبق
هذا أيضاً
على
الملفات أو
الأدلة
التي تُعطى
أسماؤها في
سطر
الأوامر.
يسري هذا
الخيار في
وقت قراءة
سطر
الأوامر،
مما يعني
أنه لا
يمكنك
البحث في
جزء من نظام
الملفات مع
تفعيل هذا
الخيار
وجزء آخر
بدونه (إذا
كنت بحاجة
لفعل ذلك،
فستحتاج
لإصدار
أمري find
بدلاً من
ذلك،
أحدهما
بالخيار
والآخر
بدونه).
علاوة على ذلك، سيتجاهل find مع خيار -ignore_readdir_race أخطاء إجراء -delete في حال اختفاء الملف منذ قراءة الدليل الأب: لن يخرج تشخيص خطأ، وسيكون رمز العودة لإجراء -delete هو صواب.
- -maxdepth levels
- انزل بمقدار 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 دليلاً، وبعد أن يجلب حالة (stat) أدلة فرعية أقل بـ 2 من عدد روابط الدليل، فإنه يعلم أن بقية المداخل في الدليل هي ليست أدلة (ملفات 'ورقية' leaf في شجرة الأدلة). إذا كان المطلوب فقط فحص أسماء الملفات، فلا حاجة لجلب حالتها؛ وهذا يعطي زيادة ملحوظة في سرعة البحث.
- -version, --version
- اطبع رقم إصدار find ثم اخرج.
- -xautofs
- لا تنزل في المجلدات على أنظمة ملفات autofs.
- -xdev
- لا تنزل في أدلة موجودة على أنظمة ملفات أخرى.
الاختبارات¶
تسمح بعض الاختبارات، على سبيل المثال -newerXY و -samefile، بالمقارنة بين الملف الذي يُفحص حالياً وبعض الملفات المرجعية المحددة في سطر الأوامر. عند استخدام هذه الاختبارات، يتحدد تفسير الملف المرجعي بواسطة الخيارات -H و -L و -P وأي خيار -follow سابق، ولكن يُفحص الملف المرجعي مرة واحدة فقط، في الوقت الذي يُحلل فيه سطر الأوامر. إذا تعذر فحص الملف المرجعي (على سبيل المثال، فشل استدعاء نظام stat(2) له)، فستصدر رسالة خطأ، ويخرج find بحالة غير صفرية.
يمكن تحديد وسيط عددي n للاختبارات (مثل -amin و -mtime و -gid و -inum و -links و -size و -uid و -used) كـ
- +n
- لقيم أكبر من n،
- -n
- لقيم أقل من n،
- n
- لقيمة تساوي n تمامًا.
الاختبارات المدعومة:
- -amin n
- وُصل إلى الملف لآخر مرة منذ أقل من، أو أكثر من، أو منذ n دقيقة تمامًا.
- -anewer المرجع
- وقت آخر وصول للملف الحالي أحدث من وقت آخر تعديل لبيانات ملف المرجع. إذا كان المرجع وصلة رمزية وكان الخيار -H أو الخيار -L مفعلًا، فسيُستخدم دائمًا وقت آخر تعديل لبيانات الملف الذي تشير إليه الوصلة.
- -atime n
- وُصل إلى الملف لآخر مرة منذ أقل من، أو أكثر من، أو منذ n*24 ساعة تمامًا. عندما يحسب find عدد الفترات (مضاعفات 24 ساعة) منذ آخر وصول للملف، فإنه يتجاهل أي أجزاء كسرية، لذا لمطابقة -atime +1، يجب أن يكون الملف قد وُصل إليه منذ يومين على الأقل.
- -cmin n
- تغيرت حالة الملف لآخر مرة منذ أقل من، أو أكثر من، أو منذ n دقيقة تمامًا.
- -cnewer المرجع
- وقت آخر تغيير لحالة الملف الحالي أحدث من وقت آخر تعديل لبيانات ملف المرجع. إذا كان المرجع وصلة رمزية وكان الخيار -H أو الخيار -L مفعلًا، فسيُستخدم دائمًا وقت آخر تعديل لبيانات الملف الذي تشير إليه الوصلة.
- -ctime n
- تغيرت حالة الملف لآخر مرة منذ أقل من، أو أكثر من، أو منذ n*24 ساعة تمامًا. انظر الملاحظات حول -atime لفهم كيفية تأثير التقريب على تفسير أوقات تغيير حالة الملف.
- -empty
- الملف فارغ، وهو إما ملف عادي أو دليل.
- -executable
- يطابق الملفات القابلة للتنفيذ والأدلة القابلة للبحث (بمعنى دقة اسم الملف) بواسطة المستخدم الحالي. يأخذ هذا في الاعتبار قوائم التحكم في الوصول (ACLs) وغيرها من عناصر الصلاحيات التي يتجاهلها اختبار -perm. يستخدم هذا الاختبار استدعاء النظام access(2)، ولذا يمكن خداعه بواسطة خوادم NFS التي تنفذ تعيين معرف المستخدم (UID mapping) أو (root-squashing)، لأن العديد من الأنظمة تنفذ access(2) في نواة العميل وبالتالي لا يمكنها استخدام معلومات تعيين UID الموجودة على الخادم. ولأن هذا الاختبار يعتمد فقط على نتيجة استدعاء النظام access(2)، فلا يوجد ضمان بأن الملف الذي ينجح في هذا الاختبار يمكن تنفيذه فعليًا.
- -false
- دائمًا خطأ (false).
- -fstype النوع
- الملف موجود على نظام ملفات من نوع النوع. تختلف أنواع أنظمة الملفات الصالحة باختلاف إصدارات Unix؛ القائمة التالية غير كاملة لأنواع أنظمة الملفات المقبولة في بعض إصدارات Unix: ufs، 4.2، 4.3، nfs، tmp، mfs، S51K، S52K. يمكنك استخدام -printf مع التوجيه %F لرؤية أنواع أنظمة الملفات لديك.
- -gid n
- معرف المجموعة الرقمي (GID) للملف أقل من، أو أكثر من، أو يساوي n تمامًا.
- -group اسم_المجموعة
- الملف ينتمي للمجموعة اسم_المجموعة (يُسمح بمعرف المجموعة الرقمي).
- -ilname النمط
- مثل -lname، ولكن المطابقة غير حساسة لحالة الأحرف. إذا كان الخيار -L أو الخيار -follow مفعلًا، فإن هذا الاختبار يعيد نتيجة خطأ إلا إذا كانت الوصلة الرمزية معطوبة.
- -iname النمط
- مثل -name، ولكن المطابقة غير حساسة لحالة الأحرف. على سبيل المثال، الأنماط `fo*` و `F??` تطابق أسماء الملفات `Foo` و `FOO` و `foo` و `fOo` وغيرها. النمط `*foo*` سيطابق أيضًا ملفًا يسمى '.foobar'.
- -inum n
- الملف له رقم فهرس (inode) أصغر من، أو أكبر من، أو يساوي n تمامًا. عادةً ما يكون استخدام اختبار -samefile أسهل.
- -ipath النمط
- مثل -path، ولكن المطابقة غير حساسة لحالة الأحرف.
- -iregex النمط
- مثل -regex، ولكن المطابقة غير حساسة لحالة الأحرف.
- -iwholename النمط
- انظر -ipath. هذا البديل أقل قابلية للنقل من -ipath.
- -links n
- للملف أقل من، أو أكثر من، أو n من الوصلات الصلبة تمامًا.
- -lname النمط
- الملف عبارة عن وصلة رمزية تطابق محتوياتها نمط الصدفة النمط. لا تعامل المحارف الوصفية (metacharacters) الرموز `/` أو `.` معاملة خاصة. إذا كان الخيار -L أو الخيار -follow مفعلًا، فإن هذا الاختبار يعيد نتيجة خطأ إلا إذا كانت الوصلة الرمزية معطوبة.
- -mmin n
- عُدلت بيانات الملف لآخر مرة منذ أقل من، أو أكثر من، أو منذ n دقيقة تمامًا.
- -mtime n
- عُدلت بيانات الملف لآخر مرة منذ أقل من، أو أكثر من، أو منذ n*24 ساعة تمامًا. انظر الملاحظات حول -atime لفهم كيفية تأثير التقريب على تفسير أوقات تعديل الملف.
- -name النمط
- الاسم
الأساسي
للملف
(المسار بعد
حذف الأدلة
البادئة)
يطابق نمط
الصدفة
النمط.
ولأن
الأدلة
البادئة
لأسماء
الملفات
تُحذف، يجب
ألا يتضمن
النمط
مائلة (slash)،
لأن `-name a/b` لن
يطابق أي
شيء أبدًا
(وربما ترغب
في استخدام
-path بدلاً من
ذلك).
الاستثناء
من ذلك هو
استخدام
مائلة
واحدة فقط
كنمط (`-name /`)،
لأن هذه
سلسلة نصية
صالحة
لمطابقة
الدليل
الجذر "/"
(لأن الاسم
الأساسي لـ
"/" هو "/").
سيصدر
تحذير إذا
حاولت
تمرير نمط
يحتوي على
مائلة - لا
يتكون منها
وحدها - ما
لم يُضبط
متغير
البيئة POSIXLY_CORRECT
أو يُستخدم
الخيار -nowarn.
لتجاهل دليل والملفات التي تحته، استخدم -prune بدلاً من فحص كل ملف في الشجرة؛ انظر مثالاً في وصف هذا الإجراء. لا يتم التعرف على الأقواس المعقوفة كرموز خاصة، على الرغم من أن بعض الصدفات ومنها Bash تمنح الأقواس المعقوفة معنى خاصًا في أنماط الصدفة. تُجرى مطابقة اسم الملف باستخدام دالة المكتبة fnmatch(3). لا تنسَ إحاطة النمط بعلامات اقتباس لحمايته من التوسع بواسطة الصدفة.
- -newer المرجع
- وقت آخر تعديل لبيانات الملف الحالي أحدث من وقت آخر تعديل لبيانات ملف المرجع. إذا كان المرجع وصلة رمزية وكان الخيار -H أو الخيار -L مفعلًا، فسيُستخدم دائمًا وقت آخر تعديل لبيانات الملف الذي تشير إليه الوصلة.
- -newerXY المرجع
- ينجح إذا
كان الطابع
الزمني X
للملف الذي
يُفحص أحدث
من الطابع
الزمني Y
لملف
المرجع.
يمكن أن
يكون
الحرفان X و
Y أيًا من
الأحرف
التالية:
a وقت الوصول لملف المرجع B وقت إنشاء ملف المرجع c وقت تغيير حالة الفهرس (inode) لملف المرجع m وقت تعديل ملف المرجع t يُفسر المرجع مباشرةً على أنه وقت بعض التجميعات غير صالحة؛ على سبيل المثال، لا يصح أن يكون X هو t. بعض التجميعات غير مطبقة في جميع الأنظمة؛ على سبيل المثال B غير مدعوم في كل الأنظمة. إذا حُددت تجميعة غير صالحة أو غير مدعومة لـ XY، فستنتج عن ذلك خطأ فادح. تُفسر مواصفات الوقت كما هو الحال في المعامل الخاص بالخيار -d للأمر date من GNU. إذا حاولت استخدام وقت إنشاء ملف مرجعي، ولم يمكن تحديد هذا الوقت، فستنتج رسالة خطأ فادح. إذا حددت اختبارًا يشير إلى وقت إنشاء الملفات التي تُفحص، فسيفشل هذا الاختبار مع أي ملف يكون وقت إنشائه مجهولاً.
- -nogroup
- لا توجد مجموعة تقابل معرف المجموعة الرقمي (GID) للملف.
- -nouser
- لا يوجد مستخدم يقابل معرف المستخدم الرقمي (UID) للملف.
- -path النمط
- اسم الملف
يطابق نمط
الصدفة
النمط. لا
تعامل
المحارف
الوصفية
الرموز `/` أو `.`
معاملة
خاصة؛
فمثلاً،
find . -path "./sr*sc"
سيطبع مدخلاً لدليل يسمى ./src/misc (إذا كان موجودًا). لتجاهل شجرة دليل كاملة، استخدم -prune بدلاً من فحص كل ملف في الشجرة. لاحظ أن اختبار مطابقة النمط ينطبق على اسم الملف بالكامل، بدءًا من إحدى نقاط البداية المذكورة في سطر الأوامر. ولن يكون لاستخدام مسار مطلق معنى هنا إلا إذا كانت نقطة البداية ذات الصلة مسارًا مطلقًا أيضًا. هذا يعني أن هذا الأمر لن يطابق أي شيء أبدًا:
find bar -path /foo/bar/myfile -print
يقارن Find المعطى -path مع ناتج دمج اسم الدليل والاسم الأساسي للملف الذي يفحصه. وبما أن ناتج الدمج لن ينتهي أبدًا بمائلة، فإن المعطيات -path التي تنتهي بمائلة لن تطابق شيئًا (باستثناء ربما نقطة بداية محددة في سطر الأوامر). المسند -path مدعوم أيضًا بواسطة find في نظام HP-UX وهو جزء من معيار POSIX 2008. - -perm الوضع
- بِتّات صلاحية الملف تطابق الوضع تمامًا (سواء كان ثمانيًا أو رمزيًا). وبما أن المطابقة التامة مطلوبة، فإذا كنت تريد استخدام هذا النموذج للأوضاع الرمزية، فقد تضطر إلى تحديد سلسلة وضع معقدة نوعًا ما. على سبيل المثال، `-perm g=w` سيطابق فقط الملفات التي وضعها 0020 (أي الملفات التي تكون فيها صلاحية كتابة المجموعة هي الصلاحية الوحيدة المحددة). من المرجح أنك سترغب في استخدام الصيغتين `/` أو `-` ، مثلًا `-perm -g=w` الذي يطابق أي ملف لديه صلاحية كتابة المجموعة. راجع قسم أمثلة لمزيد من الأمثلة التوضيحية.
- -perm -الوضع
- كل بِتّات الصلاحية في الوضع محددة للملف. الأوضاع الرمزية مقبولة في هذه الصيغة، وعادةً ما تكون هذه هي الطريقة التي ترغب في استخدامها بها. يجب تحديد `u` أو `g` أو `o` إذا كنت تستخدم وضعًا رمزيًا. راجع قسم أمثلة لمزيد من الأمثلة التوضيحية.
- -perm /الوضع
- أيّ من بِتّات الصلاحية في الوضع محددة للملف. الأوضاع الرمزية مقبولة في هذه الصيغة. يجب تحديد `u` أو `g` أو `o` إذا كنت تستخدم وضعًا رمزيًا. راجع قسم أمثلة لمزيد من الأمثلة التوضيحية. إذا لم تُحدد أي بِتّات صلاحية في الوضع، فإن هذا الاختبار يطابق أي ملف (الفكرة هنا هي الاتساق مع سلوك -perm -000).
- -perm +الوضع
- هذا لم يعد مدعومًا (وهو مهجور منذ عام 2005). استخدم -perm /الوضع بدلاً منه.
- -readable
- يطابق الملفات القابلة للقراءة من قِبل المستخدم الحالي. يأخذ هذا في الاعتبار قوائم التحكم في الوصول وعناصر الصلاحيات الأخرى التي يتجاهلها اختبار -perm. يستخدم هذا الاختبار استدعاء النظام access(2)، ولذا يمكن خداعه بواسطة خوادم NFS التي تنفذ تعيين UID (أو root-squashing)، بما أن العديد من الأنظمة تنفذ access(2) في نواة العميل وبالتالي لا يمكنها استخدام معلومات تعيين UID الموجودة على الخادم.
- -regex النمط
- اسم الملف يطابق التعبير النمطي النمط. هذه مطابقة للمسار بالكامل، وليست عملية بحث. على سبيل المثال، لمطابقة ملف يسمى ./fubar3, يمكنك استخدام التعبير النمطي `.*bar.` أو `.*b.*3` ، ولكن ليس `f.*r3`. التعبيرات النمطية التي يفهمها find هي تعبيرات Emacs النمطية مبدئيًا، ولكن يمكن تغيير ذلك باستخدام الخيار -regextype.
- -samefile الاسم
- يشير الملف إلى نفس الفهرس (inode) الذي يشير إليه الاسم. عندما يكون الخيار -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 تتعامل مع الملفات المتناثرة (sparse files) بشكل مختلف. اللاحقة `b` تشير دائمًا إلى كتل ذات 512 بايت ولا تشير أبدًا إلى كتل ذات 1024 بايت، وهو ما يختلف عن سلوك -ls.
- البادئتان + و - تعنيان أكبر من وأقل من، كالمعتاد؛ أي أن الحجم الذي يساوي n وحدة تمامًا لا يطابق. تذكر أن الحجم يُقرب لأعلى إلى الوحدة التالية. ولذلك فإن -size -1M لا يعادل -size -1048576c. الأول يطابق الملفات الفارغة فقط، بينما يطابق الثاني الملفات التي يتراوح حجمها من 0 إلى 1,048,575 بايت.
- -true
- صحيح (true) دائمًا.
- -type c
- الملف من نوع c:
- للبحث عن أكثر من نوع في وقت واحد، يمكنك توفير قائمة مجمعة من أحرف الأنواع مفصولة بفاصلة `,' (امتداد جنو).
- -uid n
- معرف المستخدم الرقمي للملف أقل من، أو أكثر من، أو يساوي n تماماً.
- -used n
- آخر وصول للملف كان قبل أقل من، أو أكثر من، أو خلال n يوماً تماماً بعد آخر تغيير في حالته.
- -user uname
- الملف مملوك للمستخدم uname (يُسمح بمعرف المستخدم الرقمي).
- -wholename pattern
- انظر -path. هذا البديل أقل قابلية للنقل من -path.
- -writable
- يطابق الملفات القابلة للكتابة بواسطة المستخدم الحالي. يأخذ هذا في الحسبان قوائم التحكم في الوصول وعناصر الأذونات الأخرى التي يتجاهلها اختبار -perm. يستخدم هذا الاختبار استدعاء النظام access(2)، ولذا يمكن خداعه بواسطة خوادم NFS التي تقوم برسم خرائط UID (أو root-squashing)، بما أن العديد من الأنظمة تنفذ access(2) في نواة العميل وبالتالي لا يمكنها الاستفادة من معلومات رسم خرائط UID الموجودة على الخادم.
- -xtype c
- نفس خيار -type ما لم يكن الملف وصلة رمزية. بالنسبة للوصلات الرمزية: إذا حُدد الخيار -H أو -P، يكون صحيحاً إذا كان الملف وصلاً لملف من النوع c؛ وإذا أُعطي الخيار -L، يكون صحيحاً إذا كان c هو `l'. وبتعبير آخر، بالنسبة للوصلات الرمزية، يفحص -xtype نوع الملف الذي لا يفحصه -type. إذا كانت الوصلة الرمزية معطوبة (لأن الشيء الذي تشير إليه غير موجود أو الوصلة تشير إلى نفسها) فعندئذ سيتصرف -xtype بنفس طريقة -type.
- -context نمط
- (لـ SELinux فقط) سياق أمن الملف يطابق نمط glob.
الإجراءات¶
- -delete
- يحذف
الملفات أو
الأدلة؛
وتكون
النتيجة
«صحيح» إذا
نجح الحذف.
إذا فشل
الحذف،
تُصدر
رسالة خطأ
وستكون
حالة خروج
find غير
صفرية (عند
خروجه في
النهاية).
تحذير: لا تنسَ أن find يقيم سطر الأوامر كتعبير، لذا فإن وضع -delete أولًا سيجعل find يحاول حذف كل شيء تحت نقاط البداية التي حددتها.
يؤدي استخدام الإجراء -delete في سطر الأوامر إلى تفعيل الخيار -depth آليًا. وبما أن -depth بدوره يجعل -prune غير فعال، فلا يمكن الجمع بين الإجراء -delete و -prune بشكل مفيد.
غالبًا ما يرغب المستخدم في اختبار سطر أوامر find باستخدام -print قبل إضافة -delete لعملية الحذف الفعلية. لتجنب النتائج المفاجئة، يفضل عادةً تذكر استخدام -depth صراحةً خلال عمليات الاختبار الأولية تلك.
سيفشل الإجراء -delete في إزالة الدليل ما لم يكن فارغًا.
عند استخدامه مع الخيار -ignore_readdir_race، سيتجاهل find أخطاء الإجراء -delete في حالة اختفاء الملف منذ قراءة الدليل الأب: ولن يخرج تشخيص خطأ، ولن يغير رمز الخروج إلى غير صفري، وسيكون رمز إرجاع الإجراء -delete «صحيح».
- -exec أمر ;
- ينفذ أمر؛ وتكون النتيجة «صحيح» إذا أُرجع الحالة 0. تُؤخذ جميع المعاملات التالية لـ find كمعاملات للأمر حتى تُواجه معاملًا يتكون من «;». تُستبدل السلسلة «{}» باسم الملف الحالي الذي يُعالج في كل مكان تظهر فيه ضمن معاملات الأمر، وليس فقط في المعاملات التي تكون فيها وحدها، كما في بعض إصدارات find. قد يحتاج كلا التركيبين إلى الهروب (باستخدام «\») أو الاقتباس لحمايتهما من التوسع بواسطة الصدفة. راجع قسم أمثلة للحصول على أمثلة لاستخدام الخيار -exec. يُشغل الأمر المحدد مرة واحدة لكل ملف مطابق. يُنفذ الأمر في دليل البداية. توجد مشاكل أمنية لا يمكن تجنبها تحيط باستخدام الإجراء -exec؛ يجب استخدام الخيار -execdir بدلًا منه.
- -exec أمر {} +
- هذا البديل من الإجراء -exec يُشغل الأمر المحدد على الملفات المختارة، ولكن يُبنى سطر الأوامر عن طريق إلحاق اسم كل ملف مختار في النهاية؛ وسيكون إجمالي عدد استدعاءات الأمر أقل بكثير من عدد الملفات المطابقة. يُبنى سطر الأوامر بنفس الطريقة التي يبني بها xargs خطوط أوامره. يُسمح بنسخة واحدة فقط من «{}» داخل الأمر، ويجب أن تظهر في النهاية، مباشرة قبل «+»؛ وتحتاج إلى الهروب (بواسطة «\») أو الاقتباس لحمايتها من التفسير بواسطة الصدفة. يُنفذ الأمر في دليل البداية. إذا أرجع أي استدعاء بصيغة «+» قيمة غير صفرية كحالة خروج، فإن find يرجع حالة خروج غير صفرية. إذا واجه find خطأً، فقد يتسبب ذلك أحيانًا في خروج فوري، لذا قد لا تُشغل بعض الأوامر المعلقة على الإطلاق. لهذا السبب، فإن -exec my-command ... {} + -quit قد لا يؤدي إلى تشغيل my-command فعليًا. هذا البديل من -exec يرجع دائمًا «صحيح».
- -execdir أمر ;
- -execdir أمر {} +
- مثل -exec، ولكن يُشغل الأمر المحدد من الدليل الفرعي الذي يحتوي على الملف المطابق، والذي ليس هو الدليل الذي بدأت منه find عادةً. كما هو الحال مع -exec، يجب اقتباس {} إذا استدعي find من صدفة. هذه طريقة أكثر أمانًا لاستدعاء الأوامر، لأنها تتجنب ظروف السباق أثناء تحليل المسارات إلى الملفات المطابقة. كما هو الحال مع الإجراء -exec، فإن صيغة «+» لـ -execdir ستبني سطر أوامر لمعالجة أكثر من ملف مطابق، ولكن أي استدعاء معين لـ أمر سيسرد فقط الملفات الموجودة في نفس الدليل الفرعي. إذا استخدمت هذا الخيار، فيجب التأكد من أن متغير البيئة PATH لا يشير إلى «.»؛ وإلا، يمكن للمهاجم تشغيل أي أوامر يريدها عن طريق ترك ملف مسمى بشكل مناسب في دليل ستشغل فيه -execdir. وينطبق الشيء نفسه على وجود إدخالات في PATH فارغة أو ليست أسماء أدلة مطلقة. إذا أرجع أي استدعاء بصيغة «+» قيمة غير صفرية كحالة خروج، فإن find يرجع حالة خروج غير صفرية. إذا واجه find خطأً، فقد يتسبب هذا أحيانًا في خروج فوري، لذا قد لا تُشغل بعض الأوامر المعلقة على الإطلاق. تعتمد نتيجة الإجراء على ما إذا كان البديل المستخدم هو + أو ;؛ يرجع -execdir أمر {} + دائمًا «صحيح»، بينما يرجع -execdir أمر {} ; «صحيح» فقط إذا أرجع أمر القيمة 0.
- -fls ملف
- صحيح؛ مثل -ls ولكن يكتب إلى ملف مثل -fprint. يُنشأ ملف المخرجات دائمًا، حتى لو لم يطابق المسند أبدًا. راجع قسم أسماء الملفات غير العادية للحصول على معلومات حول كيفية التعامل مع المحارف غير العادية في أسماء الملفات.
- -fprint ملف
- صحيح؛ يطبع اسم الملف الكامل في الملف ملف. إذا لم يكن ملف موجودًا عند تشغيل find، فسيُنشأ؛ وإذا كان موجودًا، فسيُبتر. تُعامل أسماء الملفات /dev/stdout و /dev/stderr بشكل خاص؛ حيث تشير إلى المخرجات القياسية ومخرجات الخطأ القياسية، على التوالي. يُنشأ ملف المخرجات دائمًا، حتى لو لم يطابق المسند أبدًا. راجع قسم أسماء الملفات غير العادية للحصول على معلومات حول كيفية التعامل مع المحارف غير العادية في أسماء الملفات.
- -fprint0 ملف
- صحيح؛ مثل -print0 ولكن يكتب إلى ملف مثل -fprint. يُنشأ ملف المخرجات دائمًا، حتى لو لم يطابق المسند أبدًا. راجع قسم أسماء الملفات غير العادية للحصول على معلومات حول كيفية التعامل مع المحارف غير العادية في أسماء الملفات.
- -fprintf ملف تنسيق
- صحيح؛ مثل -printf ولكن يكتب إلى ملف مثل -fprint. يُنشأ ملف المخرجات دائمًا، حتى لو لم يطابق المسند أبدًا. راجع قسم أسماء الملفات غير العادية للحصول على معلومات حول كيفية التعامل مع المحارف غير العادية في أسماء الملفات.
- -ls
- صحيح؛ يسرد الملف الحالي بتنسيق ls -dils على المخرجات القياسية. عدد الكتل هو لكتل بحجم 1 ك.بايت، ما لم يُضبط متغير البيئة POSIXLY_CORRECT، وفي هذه الحالة تُستخدم كتل بحجم 512 بايت. راجع قسم أسماء الملفات غير العادية للحصول على معلومات حول كيفية التعامل مع المحارف غير العادية في أسماء الملفات.
- -ok أمر ;
- مثل -exec ولكن يسأل المستخدم أولاً. إذا وافق المستخدم، يُشغل الأمر. وإلا فإنه يرجع «خطأ» فقط. إذا شُغل الأمر، فسيُعاد توجيه مدخلاته القياسية من /dev/null. لا يجوز تحديد هذا الإجراء مع الخيار -files0-from.
- تُطابق الاستجابة للمطالبة مع زوج من التعبيرات النمطية لتحديد ما إذا كانت استجابة بالإيجاب أو النفي. يُحصل على هذا التعبير النمطي من النظام إذا ضُبط متغير البيئة POSIXLY_CORRECT، وإلا فمن ترجمات رسائل find. إذا لم يكن لدى النظام تعريف مناسب، فسيُستخدم تعريف find الخاص. في كلتا الحالتين، سيتأثر تفسير التعبير النمطي نفسه بمتغيرات البيئة LC_CTYPE (أصناف المحارف) و LC_COLLATE (نطاقات المحارف وأصناف التكافؤ).
- -okdir أمر ;
- مثل -execdir ولكن يسأل المستخدم أولاً بنفس طريقة -ok. إذا لم يوافق المستخدم، يرجع «خطأ» فقط. إذا شُغل الأمر، فسيُعاد توجيه مدخلاته القياسية من /dev/null. لا يجوز تحديد هذا الإجراء مع الخيار -files0-from.
- صحيح؛ يطبع اسم الملف الكامل على المخرجات القياسية، متبوعًا بسطر جديد. إذا كنت تمرر مخرجات find إلى برنامج آخر وكان هناك أدنى احتمال لأن تحتوي الملفات التي تبحث عنها على سطر جديد، فيجب عليك التفكير بجدية في استخدام الخيار -print0 بدلاً من -print. راجع قسم أسماء الملفات غير العادية للحصول على معلومات حول كيفية التعامل مع المحارف غير العادية في أسماء الملفات.
- -print0
- صحيح؛ يطبع اسم الملف الكامل على المخرجات القياسية، متبوعًا بمحرف خالٍ (بدلاً من محرف السطر الجديد الذي يستخدمه -print). يسمح هذا لأسماء الملفات التي تحتوي على أسطر جديدة أو أنواع أخرى من المساحات البيضاء بأن تُفسر بشكل صحيح بواسطة البرامج التي تعالج مخرجات find. يقابل هذا الخيار الخيار -0 في xargs.
- -printf تنسيق
- صحيح؛ يطبع تنسيق على المخرجات القياسية، مفسرًا هروب «\» وتوجيهات «%». يمكن تحديد عرض الحقول ودقتها كما هو الحال مع دالة C printf(3). يرجى ملاحظة أن العديد من الحقول تُطبع كـ %s بدلاً من %d، وهذا قد يعني أن الأعلام لا تعمل كما قد تتوقع. وهذا يعني أيضًا أن العلم «-» يعمل (فهو يجبر الحقول على المحاذاة جهة اليسار). على عكس -print، لا يضيف -printf سطرًا جديدًا في نهاية السلسلة. الهروب والتوجيهات هي:
- \a
- جرس التنبيه.
- \b
- محو للخلف.
- \c
- إيقاف الطباعة من هذا التنسيق فورًا وتفريغ المخرجات.
- \f
- تغذية الصفحة.
- \n
- سطر جديد.
- \r
- رجوع الحامل.
- \t
- علامة تبويب أفقية.
- \v
- علامة تبويب عمودية.
- \0
- ASCII NUL.
- \\
- شرطة مائلة خلفية حرفية («\»).
- \NNN
- المحرف الذي رمز ASCII الخاص به هو NNN (ثماني).
يُعامل محرف «\» المتبوع بأي محرف آخر كمحرف عادي، لذا يُطبع كلاهما.
- %%
- علامة مئوية حرفية.
- %a
- وقت آخر وصول للملف بالتنسيق الذي ترجعه دالة C ctime(3).
- %Ak
- وقت آخر وصول للملف بالتنسيق المحدد بواسطة k، وهو إما «@» أو توجيه لدالة C strftime(3). يوضح ما يلي قائمة غير كاملة بالقيم الممكنة لـ 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
- صباحًا أو مساءً حسب الإعدادات المحلية
- 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». هذا امتداد من جنو. يُعطى الوقت في المنطقة الزمنية الحالية (والتي قد تتأثر بضبط متغير البيئة TZ). يتضمن حقل الثواني جزءًا كسريًا.
- X
- تمثيل الوقت حسب الإعدادات المحلية (H:M:S). يتضمن حقل الثواني جزءًا كسريًا.
- Z
- المنطقة الزمنية (مثلًا EDT)، أو لا شيء إذا تعذر تحديد المنطقة الزمنية
حقول التاريخ:
- a
- اسم يوم الأسبوع المختصر للمحلية (Sun..Sat)
- A
- اسم يوم الأسبوع الكامل للمحلية، متغير الطول (Sunday..Saturday)
- b
- اسم الشهر المختصر للمحلية (Jan..Dec)
- B
- اسم الشهر الكامل للمحلية، متغير الطول (January..December)
- c
- التاريخ والوقت للمحلية (Sat Nov 04 12:02:33 EST 1989). التنسيق هو نفسه المستخدم في ctime(3) وللحفاظ على التوافق مع هذا التنسيق، لا يوجد جزء كسر في حقل الثواني.
- d
- يوم من الشهر (01..31)
- D
- التاريخ (mm/dd/yy)
- F
- التاريخ (yyyy-mm-dd)
- h
- نفس b
- j
- يوم من السنة (001..366)
- m
- الشهر (01..12)
- U
- رقم الأسبوع من السنة مع اعتبار يوم الأحد أول أيام الأسبوع (00..53)
- w
- يوم من الأسبوع (0..6)
- W
- رقم الأسبوع من السنة مع اعتبار يوم الاثنين أول أيام الأسبوع (00..53)
- x
- تمثيل التاريخ للمحلية (mm/dd/yy)
- y
- آخر رقمين من السنة (00..99)
- Y
- السنة (1970...)
- %b
- مقدار مساحة القرص المستخدمة لهذا الملف بكتل سعتها 512 بايت. نظرًا لأن مساحة القرص تُخصّص بمضاعفات حجم كتلة نظام الملفات، فإن هذا عادة ما يكون أكبر من %s/512، ولكن يمكن أن يكون أصغر إذا كان الملف ملفًا متناثرًا.
- %Bk
- وقت ميلاد الملف، أي وقت إنشائه، بالتنسيق المحدد بواسطة k، وهو نفسه المستخدم لـ %A. يُنتج هذا التوجيه سلسلة فارغة إذا كان نظام التشغيل أو نظام الملفات الأساسي لا يدعم أوقات الميلاد.
- %c
- وقت آخر تغيير لحالة الملف بالتنسيق الذي تعيده دالة C المسماة ctime(3).
- %Ck
- وقت آخر تغيير لحالة الملف بالتنسيق المحدد بواسطة k، وهو نفسه المستخدم لـ %A.
- %d
- عمق الملف في شجرة الدليل؛ 0 تعني أن الملف هو نقطة البداية.
- %D
- رقم الجهاز الذي يوجد عليه الملف (حقل st_dev في struct stat)، بالنظام العشري.
- %f
- اطبع الاسم الأساسي؛ اسم الملف مع حذف أي أدلة سابقة (العنصر الأخير فقط). بالنسبة لـ /، النتيجة هي `/'. انظر قسم الأمثلة للاطلاع على مثال.
- %F
- نوع نظام الملفات الذي يوجد عليه الملف؛ يمكن استخدام هذه القيمة لـ -fstype.
- %g
- اسم مجموعة الملف، أو معرف المجموعة الرقمي إذا لم يكن للمجموعة اسم.
- %G
- معرف المجموعة الرقمي للملف.
- %h
- اسم الدليل؛ الأدلة السابقة لاسم الملف (كل العناصر ما عدا الأخير). إذا كان اسم الملف لا يحتوي على أي شرطات مائلة (لأنه في الدليل الحالي) يتوسع محدد %h إلى `.'. بالنسبة للملفات التي هي أدلة بحد ذاتها وتحتوي على شرطة مائلة (بما في ذلك /)، يتوسع %h إلى سلسلة فارغة. انظر قسم الأمثلة للاطلاع على مثال.
- %H
- نقطة البداية التي وُجد الملف تحتها.
- %i
- رقم الآينود (inode) للملف (بالنظام العشري).
- %k
- مقدار مساحة القرص المستخدمة لهذا الملف بكتل سعتها 1 كيلوبايت. نظرًا لأن مساحة القرص تُخصّص بمضاعفات حجم كتلة نظام الملفات، فإن هذا عادة ما يكون أكبر من %s/1024، ولكن يمكن أن يكون أصغر إذا كان الملف ملفًا متناثرًا.
- %l
- هدف الوصلة الرمزية (سلسلة فارغة إذا لم يكن الملف وصلة رمزية).
- %m
- بتات أذونات الملف (بالنظام الثماني). يستخدم هذا الخيار الأرقام `التقليدية' التي تستخدمها معظم تطبيقات يونكس، ولكن إذا كان تطبيقك الخاص يستخدم ترتيبًا غير عادي لبتات الأذونات الثمانية، فسترى فرقًا بين القيمة الفعلية لوضع الملف وخرج %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
- وقت آخر تعديل للملف بالتنسيق الذي تعيده دالة C المسماة ctime(3).
- %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 الأمر find
يتوقف
فورًا
وببساطة. لن
تُترك أي
عمليات
فرعية قيد
التشغيل.
تُستدعى أي
خطوط أوامر
بُنيت
بواسطة
-exec ... + أو
-execdir ... + قبل
الخروج من
البرنامج.
بعد تنفيذ
-quit، لن
تُعالج أي
ملفات أخرى
محددة في
سطر
الأوامر.
على سبيل
المثال،
`find /tmp/foo /tmp/bar -print -quit`
سيطبع `/tmp/foo`
فقط.
أحد الاستخدامات الشائعة لـ -quit هو التوقف عن البحث في نظام الملفات بمجرد العثور على ما نريد. على سبيل المثال، إذا أردنا العثور على ملف واحد فقط يمكننا القيام بذلك:
find / -name needle -print -quit
المعاملات¶
مدرجة بترتيب تنازلي للأسبقية:
- ( expr )
- فرض الأسبقية. نظرًا لأن الأقواس خاصة بالصدفة، ستحتاج عادةً إلى اقتباسها. تستخدم العديد من الأمثلة في صفحة الدليل هذه الشرطات المائلة الخلفية لهذا الغرض: `\(...\)' بدلاً من `(...)'.
- ! expr
- صحيح إذا كان expr خطأ. سيحتاج هذا المحرف عادةً أيضًا إلى حماية من التفسير بواسطة الصدفة.
- -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، تطابق محارف صدفة الميتا (مثل `*' أو `?' أو `[]') النقطة `.' البادئة، لأن تفسير IEEE PASC رقم 126 يتطلب ذلك. هذا تغيير عن الإصدارات السابقة من findutils.
- -type
- مدعوم. يحدد POSIX كلاً من `b' و `c' و `d' و `l' و `p' و `f' و `s'. يدعم GNU find أيضاً `D' الذي يمثل الباب (Door)، حيث يوفر نظام التشغيل ذلك. علاوة على ذلك، يسمح GNU find بتحديد أنواع متعددة في وقت واحد في قائمة مفصولة بفاصلة.
- -ok
- مدعوم. يكون تفسير الاستجابة وفقاً لأنماط `نعم' و `لا' المحددة عن طريق ضبط متغير البيئة LC_MESSAGES. عندما يُضبط متغير البيئة POSIXLY_CORRECT، تُؤخذ هذه الأنماط من تعريف النظام للاستجابة الإيجابية (نعم) أو السلبية (لا). راجع وثائق النظام لـ nl_langinfo(3)، وخاصة YESEXPR و NOEXPR. عندما لا يُضبط POSIXLY_CORRECT، تُؤخذ الأنماط بدلاً من ذلك من كتالوج رسائل find الخاص.
- -newer
- مدعوم. إذا كان الملف المحدد هو رابط رمزي، فإنه يُتبع دائماً (dereferenced). هذا تغيير عن السلوك السابق، الذي كان يأخذ الوقت ذي الصلة من الرابط الرمزي؛ راجع قسم HISTORY أدناه.
- -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
- يحدد الإعدادات المحلية (locale) التي ستُستخدم للرسائل الدولية. إذا كان متغير البيئة POSIXLY_CORRECT مضبوطاً، فإن هذا يحدد أيضاً تفسير الاستجابة للمطالبة التي يُصدرها إجراء -ok.
- NLSPATH
- يحدد موقع كتالوجات رسائل التدويل.
- PATH
- يؤثر على الأدلة التي يُبحث فيها للعثور على الملفات التنفيذية المستدعاة بواسطة -exec و -execdir و -ok و -okdir.
- POSIXLY_CORRECT
- يحدد حجم الكتلة المستخدم بواسطة -ls و -fls. إذا كان POSIXLY_CORRECT مضبوطاً، تكون الكتل وحدات من 512 بايت. بخلاف ذلك، تكون وحدات من 1024 بايت.
- يؤدي ضبط هذا المتغير أيضاً إلى إيقاف رسائل التحذير (أي أنه يتضمن -nowarn) افتراضياً، لأن POSIX يتطلب أن تكون جميع الرسائل المطبوعة على stderr، باستثناء مخرجات -ok، تشخيصية ويجب أن تؤدي إلى حالة خروج غير صفرية.
- عندما لا يُضبط 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 أو ما
دونه
واحذفها،
مع معالجة
أسماء
الملفات
بطريقة
تضمن
التعامل
الصحيح مع
أسماء
الملفات أو
الأدلة
التي تحتوي
على علامات
اقتباس
مفردة أو
مزدوجة أو
مسافات أو
أسطر جديدة.
يأتي اختبار -name قبل اختبار -type لتجنب الاضطرار إلى استدعاء stat(2) على كل ملف.
$ find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
لاحظ أنه لا يزال هناك سباق (race condition) بين الوقت الذي يعبر فيه find التسلسل الهرمي طابعاً أسماء الملفات المتطابقة، والوقت الذي تعمل فيه العملية المنفذة بواسطة xargs على ذلك الملف.
معالجة نقاط بداية عشوائية¶
- •
- بفرض أن
برنامجاً
آخر proggy يقوم
بالتصفية
المسبقة
وينشئ
قائمة ضخمة
من الملفات
المفصولة
بـ NUL، فقم
بمعالجة
هذه
الملفات
كنقاط
بداية،
وابحث عن
جميع
الملفات
العادية
الفارغة
بينها:
يعني استخدام `-files0-from -` قراءة أسماء نقاط البداية من الدخل القياسي، أي من الأنبوب (pipe)؛ ويضمن -maxdepth 0 فحص تلك المدخلات المحددة صراحةً فقط دون التكرار داخل الأدلة (في حال كانت إحدى نقاط البداية دليلاً).
$ proggy | find -files0-from - -maxdepth 0 -type f -empty
تنفيذ أمر لكل ملف¶
- •
- شغّل file على
كل ملف في
الدليل
الحالي أو
ما دونه.
لاحظ أن الأقواس محاطة بعلامات اقتباس مفردة لحمايتها من التفسير كعلامات ترقيم لنص الصدفة البرمجي. وبالمثل، تُحمى الفاصلة المنقوطة باستخدام شرطة مائلة عكسية، على الرغم من أنه كان من الممكن استخدام علامات اقتباس مفردة في تلك الحالة أيضاً.
$ find . -type f -exec file '{}' \;
في كثير من الحالات، قد يفضل المرء صيغة `-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' \)
البحث عن الملفات حسب العمر¶
- •
- ابحث عن
الملفات في
دليلك
المنزلي
التي عُدلت
في آخر أربع
وعشرين
ساعة.
يعمل هذا الأمر بهذه الطريقة لأن الوقت المنقضي منذ آخر تعديل لكل ملف يُقسم على 24 ساعة ويُهمل أي باقي. هذا يعني أنه لمطابقة -mtime 0، يجب أن يكون للملف تعديل في الماضي قبل أقل من 24 ساعة.
$ find $HOME -mtime 0
البحث عن الملفات حسب الأذونات¶
- •
- ابحث عن
الملفات
القابلة
للتنفيذ
ولكنها غير
قابلة
للقراءة.
$ find /sbin /usr/sbin -executable \! -readable -print
- •
- ابحث عن
الملفات
التي لها
إذن
القراءة
والكتابة
لمالكها
ومجموعتها،
ولكن يمكن
للمستخدمين
الآخرين
قراءتها
ولكن لا
يمكنهم
الكتابة
إليها.
الملفات التي تستوفي هذه المعايير ولكن لها بتات أذونات أخرى مضبوطة (على سبيل المثال إذا كان بإمكان شخص ما تنفيذ الملف) لن تُطابق.
$ find . -perm 664
- •
- ابحث عن
الملفات
التي لها
إذن
القراءة
والكتابة
لمالكها
ومجموعتها،
والتي يمكن
للمستخدمين
الآخرين
قراءتها،
بغض النظر
عن وجود أي
بتات
أذونات
إضافية (على
سبيل
المثال بت
التنفيذ).
سيُطابق هذا ملفاً بوضع 0777، على سبيل المثال.
$ find . -perm -664
- •
- ابحث عن
الملفات
القابلة
للكتابة
بواسطة شخص
ما (مالكها،
أو
مجموعتها،
أو أي شخص
آخر).
$ 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
- •
- بحث أكثر
تفصيلاً في
الأذونات.
يبحث هذان الأمران عن الملفات القابلة للقراءة للجميع (-perm -444 أو -perm -a+r)، ولها بت كتابة واحد على الأقل مضبوط (-perm /222 أو -perm /a+w) ولكنها ليست قابلة للتنفيذ لأي شخص (! -perm /111 أو ! -perm /a+x على التوالي).
$ find . -perm -444 -perm /222 \! -perm /111 $ find . -perm -a+r -perm /a+w \! -perm /a+x
التقليم (Pruning) - حذف ملفات وأدلة فرعية¶
- •
- انسخ
محتويات
/source-dir إلى /dest-dir،
ولكن احذف
الملفات
والأدلة
المسماة .snapshot
(وأي شيء
بداخلها).
كما أنه
يحذف
الملفات أو
الأدلة
التي ينتهي
اسمها بـ `~'،
ولكن ليس
محتوياتها.
إنّ الصيغة -prune -o \( ... -print0 \) شائعة جدًا. الفكرة هنا هي أن التعبير قبل -prune يطابق الأشياء التي سيُنفذ عليها التقليم. ومع ذلك، فإن الإجراء -prune نفسه يُرجع قيمة صواب، لذا فإن -o اللاحق يضمن تقييم الجانب الأيمن فقط للمجلدات التي لم تُقلم (محتويات المجلدات المقلمة لا تُزار أصلاً، لذا فإن محتوياتها ليست ذات صلة). التعبير الموجود على الجانب الأيمن من -o يوضع بين قوسين للوضوح فقط. فهو يؤكد على أن إجراء -print0 لا يحدث إلا للأشياء التي لم يُطبق عليها -prune. ولأن شرط `and' المبدئي بين الاختبارات يربط بشكل أقوى من -o، فإن هذا هو السلوك المبدئي على أي حال، ولكن الأقواس تساعد في توضيح ما يجري.
$ cd /source-dir $ find . -name .snapshot -prune -o \( \! -name '*~' -print0 \) \
| cpio -pmd0 /dest-dir
- •
- بالنظر إلى
مجلد
المشاريع
التالي
ومجلدات
إدارة SCM
المرتبطة
بها، نَفّذ
بحثًا
فعالاً عن
جذور
المشاريع:
مخرجات عينة:
$ find repo/ \
\( -exec test -d '{}/.svn' \; \ -or -exec test -d '{}/.git' \; \ -or -exec test -d '{}/CVS' \; \ \) -print -prune
في هذا المثال، يمنع -prune النزول غير الضروري إلى المجلدات التي اُكتشفت بالفعل (على سبيل المثال لا نبحث في project3/src لأننا وجدنا بالفعل project3/.svn)، ولكنه يضمن العثور على المجلدات الشقيقة (project2 و project3).
repo/project1/CVS repo/gnu/project2/.svn repo/gnu/project3/.svn repo/gnu/project3/src/.svn repo/project4/.git
أمثلة مفيدة أخرى¶
- •
- البحث عن
عدة أنواع
من الملفات.
البحث عن الملفات، والمجلدات، والروابط الرمزية في المجلد /tmp مع تمرير هذه الأنواع كقائمة مفصولة بفاصلة (امتداد GNU)، وهو ما يعادل خلاف ذلك الصيغة الأطول والأكثر قابلية للنقل:
$ find /tmp -type f,d,l
$ 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 في الإصدار 5 من Unix كجزء من مشروع Programmer's Workbench وكتبه Dick Haight. يوفر A Research UNIX Reader: Annotated Excerpts from the Programmer’s Manual, 1971-1986 لـ Doug McIlroy بعض التفاصيل الإضافية؛ يمكنك قراءته عبر الإنترنت على <https://www.cs.dartmouth.edu/~doug/reader.pdf>.
كُتب GNU find في الأصل بواسطة Eric Decker، مع تحسينات من David MacKenzie و Jay Plett و Tim Wood. جاءت فكرة find -print0 و xargs -0 من Dan Bernstein.
التوافقية¶
بدءًا من 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.
رسالة الخطأ “paths must precede expression”¶
$ find . -name *.c -print find: paths must precede expression find: possible unquoted pattern after predicate `-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:
تُناقش الموضوعات العامة حول حزمة GNU findutils في القائمة البريدية bug-findutils:حقوق النسخ¶
حقوق
النشر © 1990–2024
مؤسسة
البرمجيات
الحرة،
المحدودة.
رخصة GPLv3+: رخصة
جنو
العمومية
الإصدار 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
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.