web-dev-qa-db-ja.com

ターミナルですべてのファイルのリストをマスクで取得します

*.hのように、マスクが定義されたフォルダ内のすべての*.cpp*/trunk/src*ファイルを検索したい。したがって、*.hファイルと*.cppファイルを別々に見つけることができます。

find . -path "*/trunk/src/*.h"
find . -path "*/trunk/src/*.cpp" 

両方のタイプ(*.hおよび*.cpp)のファイルリストを取得する最良の方法は何ですか?

PSリストをgrepにパイプしたいのですが。

5
Loom

「または」には-oを使用できます。

find . -path '*/trunk/src/*.h' -o -path '*/trunk/src/*.cpp'

それは同じです

find . -path '*/trunk/src/*' \( -name '*.h' -o -name '*.cpp' \)

これらのファイルに対してgrepを実行する場合:

find . \( -path '*/trunk/src/*.h' -o -path '*/trunk/src/*.cpp' \) -exec grep PATTERN {} +

または

find . -path '*/trunk/src/*' \( -name '*.h' -o -name '*.cpp' \) -exec grep PATTERN {} +
10
choroba

Bashで globstar オプションをオンにして、**が任意のレベルのサブディレクトリと一致するようにします。あなたの~/.bashrcからこれを行うことができます。また、extglobオプションをオンにして、ksh拡張パターンをアクティブにします。

shopt -s globstar extglob

次に:

grep PATTERN **/trunk/src/**/*.@(h|cpp)

4.2までのbashバージョンは、**を使用すると、ディレクトリへのシンボリックリンクをたどることに注意してください。

Zshはこれを簡単にします。オプションを設定する必要はなく、入力するだけです。

grep PATTERN **/trunk/src/**/*.(h|cpp)

コマンドラインが長すぎて、Linuxまたは他のプラットフォームでGNU grepを使用している場合は、シェルの代わりにgrepを再帰してコマンドラインに保存できます。長さ。

grep -R --include='*.cpp' --include='*.h' PATTERN **/trunk/src