كيفية استخدام أمر unix "find" للعثور على جميع ملفات cpp و h؟
سؤال
أعلم أنه للعثور على جميع ملفات h التي أحتاج إلى استخدامها:يجد .-name "*.h" ولكن كيفية العثور على جميع ملفات H و CPP؟
المحلول
find . -name \*.h -print -o -name \*.cpp -print
أو
find . \( -name \*.h -o -name \*.cpp \) -print
نصائح أخرى
find -name "*.h" -or -name "*.cpp"
(تم تحريره لحماية العلامات النجمية التي تم تفسيرها على أنها تنسيق)
<وأ href = "https://stackoverflow.com/questions/277999/how-to-use-the-unix-find-command-to-find-all-the-cpp-and-h-files# 278002 "> بول Tomblin سبق لها أن قدمت إجابة رائعة، ولكنني اعتقدت رأيت نمط في ما كانوا يفعلون.
وهناك احتمالات عليك أن تكون باستخدام اكتشاف لإنشاء قائمة ملف لمعالجة مع البقرى يوم واحد، وهذه مهمة هناك وجود أكثر من ذلك بكثير أداة سهلة الاستعمال، <وأ href = "http://petdance.com/ack / "يختلط =" نوفولو noreferrer "> ACK
ويعمل على أي نظام يدعم بيرل، والبحث من خلال جميع C ++ الملفات ذات الصلة في دليل متكرر لسلسلة معينة بسيطة مثل
ack "int\s+foo" --cpp
و"--cpp"
افتراضيا مباريات الملفات .cpp .cc .cxx .m .hpp .hh .h .hxx
(ويتخطى أيضا تطبيق الاستعراض المفصل مستودع افتراضيا مباراة متعود هلم جرا الملفات التي يحدث لتبدو وكأنها الملفات في نفوسهم.)
وA، طريقة مختصرة واضحة للقيام بذلك مع find
هي:
find . -regex '.*\.\(cpp\|h\)'
ومن صفحة رجل ل-regex
: "هذا هو وجود تطابق في مسار كامل، وليس البحث." ومن هنا كانت الحاجة إلى بادئة مع .*
لتتناسب مع بداية ./dir1/dir2/...
المسار قبل اسم الملف.
find . -regex ".*\.[cChH]\(pp\)?" -print
وهذا اختبار جيد بالنسبة لي في سيغوين.
ويمكنك استخدام find
في هذا النموذج القصير:
find \( -name '*.cpp' -o -name '*.h' \) -print
ويمكن حذف -print
. باستخدام -o
فقط بين تعبيرات يكون مفيدا بشكل خاص عندما تريد العثور على أنواع متعددة من الملفات والقيام بنفس وظيفة واحدة (دعنا نقول حساب MD5SUM).