لماذا لا ترجع find
النتائج المتوقعة؟ إليك كيفية إصلاح ذلك
إذا كنت قد قمت بتشغيل الأمر find
في نظام Unix الخاص بك، فقد تكون واجهت حالة محبطة حيث يفشل الأمر في تحديد الملفات التي تعلم أنها موجودة. على سبيل المثال، قد ترغب في البحث عن ملفات نصوص الشل، ورغم أنك متأكد من وجودها، فإن الناتج يكون فارغًا. هذه المشكلة الشائعة غالبًا ما تنشأ عن سوء الفهم حول كيفية تفسير الأمر find
لرموز البدل. دعنا نستكشف المشكلة ونكتشف الحلول التي يمكن أن تعيد بحثك على المسار الصحيح.
المشكلة: find
لا تعمل كما هو متوقع
اعتبر هذا الأمر الذي قد تكون قد جربته:
$ find /usr -name *.sh
هذا الأمر يهدف إلى البحث عن جميع الملفات ذات امتداد .sh
في الدليل /usr
. ومع ذلك، إذا وجدت أن النتائج لا تظهر، فقد تتساءل، لماذا لا تعمل find
؟
أنت تعلم أن النصوص موجودة؛ على سبيل المثال، عندما تقوم بتشغيل:
$ ls /usr/local/lib/*.sh
يمكنك رؤية ملفات مثل tclConfig.sh
و tkConfig.sh
. إذن، ما الذي يحدث بشكل خاطئ مع الأمر find
الخاص بك؟
فهم القضية
المشكلة الرئيسية هنا هي كيفية تفسير قشرة الأوامر لرمز البدل *.sh
. على وجه الخصوص، إذا كانت هناك أي ملفات في الدليل الحالي الخاص بك تتطابق مع *.sh
، فإن القشرة توسع هذا الرمز قبل أن يحصل find
على فرصة للتصرف. يمكن أن يؤدي ذلك إلى سلوك غير متوقع:
-
توسيع رمز البدل
- إذا كانت هناك ملفات
.sh
في الدليل الحالي الخاص بك، على سبيل المثال،tkConfig.sh
، فسيؤدي كتابةfind /usr -name *.sh
إلى توسيع هذا إلىfind /usr -name tkConfig.sh
، مما يحد فعليًا من بحثك إلى تلك الملفات فقط.
- إذا كانت هناك ملفات
-
أخطاء في الصياغة
- إذا تطابقت عدة ملفات، قد يثير
find
خطأ في صياغة بسبب الحجج الغامضة:find: bad option tkConfig.sh
- إذا تطابقت عدة ملفات، قد يثير
الحل 1: اقتباس رمز البدل
لمنع القشرة من توسيع رمز البدل قبل تمريره إلى find
، يمكنك اقتباس حرف رمز البدل:
- إما استخدام الاقتباسات المزدوجة:
$ find /usr -name "*.sh"
- أو استخدام الاقتباسات المفردة:
$ find /usr -name '*.sh'
من خلال اقتباس *.sh
، فإنك توجه القشرة لتمريرها كما هي إلى find
، مما يمكنه من البحث عن جميع ملفات .sh
في الدليل المحدد.
الحل 2: متابعة الروابط الرمزية
سبب آخر محتمل لعدم عمل find
كما هو متوقع هو وجود روابط رمزية في الدليل /usr
أو الأدلة الفرعية الخاصة به. بشكل افتراضي، لا يتبع find
الروابط الرمزية. إذا كنت تشك في أن هذا قد يكون هو الحال، يمكنك استخدام خيار -follow
:
$ find /usr -follow -name '*.sh'
يسمح لك هذا الأمر لـ find
بالتنقل عبر الروابط الرمزية والبحث عن الملفات المطلوبة.
الخلاصة
باختصار، إذا وجدت أن الأمر find
لا ينتج النتائج المتوقعة عند البحث عن نصوص الشل، فمن المحتمل أن يكون ذلك بسبب توسيع رموز البدل أو وجود روابط رمزية. تذكر دائمًا اقتباس رموز البدل الخاصة بك لمنع التوسع المبكر، وإذا لزم الأمر، استخدم خيار -follow
. من خلال تطبيق هذه الاستراتيجيات، يمكنك بنجاح تحديد نصوص الشل الخاصة بك وتعزيز مهارتك في سطر الأوامر!
بحث سعيد!
الآن أنت مستعد لمواجهة الأمر find
بثقة! إذا كانت لديك أي أسئلة أو مشاكل أخرى، فلا تتردد في تركها في التعليقات أدناه.