لماذا لا تجد ** تجد ** أي شيء؟
سؤال
أنا أبحث عن ملفات البرامج النصية المثبتة على نظامي، ولكن يجد لا يعمل:
$ 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'