私が使用する必要があるすべての.h
ファイルを見つけるには、次のようにします。
find . -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"
(フォーマットとして解釈されたアスタリスクを保護するために編集)
Paul Tomblin すでに素晴らしい答えを提供していますが、私はあなたがしていることのパターンを見たと思いました。
おそらく、findを使用してgrepで処理するファイルリストを1日生成することになるでしょう。そのようなタスクには、はるかにユーザーフレンドリーなツール Ack が存在します。
Perlをサポートするすべてのシステムで動作し、ディレクトリ内のすべてのC++関連ファイルを再帰的に検索して、指定された文字列を検索するのは、次のように簡単です。
ack "int\s+foo" --cpp
"--cpp"
はデフォルトで.cpp .cc .cxx .m .hpp .hh .h .hxx
ファイルに一致します
(また、デフォルトではリポジトリディレクトリをスキップするため、たまたまファイル内のファイルのように見えるファイルとは一致しません。)
find
でこれを行うための短くて明確な方法は、次のとおりです。
find . -regex '.*\.\(cpp\|h\)'
-regex
のmanページから:「これはパス全体の一致であり、検索ではありません。」したがって、ファイル名の前のパス.*
の先頭と一致するように、./dir1/dir2/...
をプレフィックスとして付ける必要があります。
次の短い形式でfind
を使用できます。
find \( -name '*.cpp' -o -name '*.h' \) -print
-print
は省略できます。式間で-o
を使用することは、複数の種類のファイルを検索して1つの同じジョブ(md5sumの計算など)を実行する場合に特に便利です。
find . -regex ".*\.[cChH]\(pp\)?" -print
これは私にとってcygwinで問題なくテストされました。