كيفية استخدام أمر unix "find" للعثور على جميع ملفات cpp و h؟

StackOverflow https://stackoverflow.com/questions/277999

  •  07-07-2019
  •  | 
  •  

سؤال

أعلم أنه للعثور على جميع ملفات 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).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top