web-dev-qa-db-ja.com

UNIXの「find」コマンドを使用してすべてのcppおよびhファイルを見つける方法

私が使用する必要があるすべての.hファイルを見つけるには、次のようにします。

find . -name "*.h"

しかし、すべての.hおよび.cppファイルを見つける方法は?

28
yigal
find . -name \*.h -print -o -name \*.cpp -print

または

find . \( -name \*.h -o -name \*.cpp \) -print
41
Paul Tomblin
find -name "*.h" -or -name "*.cpp"

(フォーマットとして解釈されたアスタリスクを保護するために編集)

12
Philluminati

Paul Tomblin すでに素晴らしい答えを提供していますが、私はあなたがしていることのパターンを見たと思いました。

おそらく、findを使用してgrepで処理するファイルリストを1日生成することになるでしょう。そのようなタスクには、はるかにユーザーフレンドリーなツール Ack が存在します。

Perlをサポートするすべてのシステムで動作し、ディレクトリ内のすべてのC++関連ファイルを再帰的に検索して、指定された文字列を検索するのは、次のように簡単です。

ack "int\s+foo" --cpp 

"--cpp"はデフォルトで.cpp .cc .cxx .m .hpp .hh .h .hxxファイルに一致します

(また、デフォルトではリポジトリディレクトリをスキップするため、たまたまファイル内のファイルのように見えるファイルとは一致しません。)

6
Kent Fredric

findでこれを行うための短くて明確な方法は、次のとおりです。

find . -regex '.*\.\(cpp\|h\)'

-regexのmanページから:「これはパス全体の一致であり、検索ではありません。」したがって、ファイル名の前のパス.*の先頭と一致するように、./dir1/dir2/...をプレフィックスとして付ける必要があります。

5
mdup

次の短い形式でfindを使用できます。

find \( -name '*.cpp' -o -name '*.h' \) -print

-printは省略できます。式間で-oを使用することは、複数の種類のファイルを検索して1つの同じジョブ(md5sumの計算など)を実行する場合に特に便利です。

2
northtea
find . -regex ".*\.[cChH]\(pp\)?" -print

これは私にとってcygwinで問題なくテストされました。

2
Lyle Snodgrass