سؤال

أنا أبحث عن ملفات البرامج النصية المثبتة على نظامي، ولكن يجد لا يعمل:

$ find /usr -name *.sh

لكنني أعلم أن هناك الكثير من النصوص هناك.على سبيل المثال:

$ ls /usr/local/lib/*.sh
/usr/local/lib/tclConfig.sh  
/usr/local/lib/tkConfig.sh

لماذا لا يجد عمل؟

هل كانت مفيدة؟

المحلول

حاول اقتباس حرف البدل:

$ find /usr -name \*.sh

أو:

$ find /usr -name '*.sh'

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

$ find /usr -name tkConfig.sh

والتي سوف تجد فقط الملفات المسماة tkConfig.sh.إذا كان لديك أكثر من ملف متطابق *.ش, ، فستحصل على خطأ في بناء الجملة من يجد:

$ cd /usr/local/lib
$ find /usr -name *.sh
find: bad option tkConfig.sh
find: path-list predicate-list

مرة أخرى، السبب هو أن حرف البدل يمتد إلى كلا الملفين:

$ find /usr -name tclConfig.sh tkConfig.sh

إن اقتباس حرف البدل يمنعه من التوسع قبل الأوان.

الاحتمال الآخر هو أن /usr أو أحد أدلةه الفرعية هو رابط رمزي. يجد لا يتبع الروابط عادةً، لذا قد تحتاج إلى -يتبع خيار:

$ find /usr -follow -name '*.sh'

نصائح أخرى

في بعض الأنظمة (Solaris، على سبيل المثال)، لا يوجد إجراء افتراضي، لذلك تحتاج إلى إضافة الأمر -print.

find /usr -name '*.foo' -print

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

locate '/usr*.sh'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top