複数の包含および除外のためのツリーコマンド


33

treeコマンドを使用して、次のように結果を除外する例を教えてください。

  • ディレクトリを無視する(たとえばbinunitTest
  • 唯一の(と言う拡張子を持つ特定のファイルを一覧表示.cpp.c.hpp.h
  • 基準に一致する結果ファイルのみのフルパス名を提供します。

回答:


54

1つの方法は、-I-Pスイッチでパターンを使用することです:

tree -f -I "bin|unitTest" -P "*.[ch]|*.[ch]pp." your_dir/

-f、各ファイルの完全なパスを出力-Iし、垂直バーで区切られたパターン内のファイルを除外します。-Pスイッチinlcudes特定の拡張子をパターンマッチングに記載されているファイルのみ。


6
注:-Iフラグには、末尾のスラッシュを含めないでください(例:-I binnot)-I bin/
-ThorSummoner

これはエラーになりますsed: illegal option -- I
フランソワロマン

4

使用findtree使用の発見者であるコマンドをprune検索し、使用のディレクトリを除外するためのtree -Pパターンを検索します。

たとえば、miscディレクトリを除外する場合は-path ./misc -prune -o、findコマンドにa を追加するだけで、pruneスイッチを使用します。

例えば find . -path ./misc -prune -o -exec tree -P <pattern> {} \;または使用できます-name "*.cpp" in find

複数のディレクトリの使用を除外するため

find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o


:私にとっては、検索での例は、エラーが「『-o』の後に予想される表現を見つける」を与える
WebComer

ちょうどしようとしましたfind . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -ofind . -path ./misc -prune -o -exec tree -P *.cpp {} \;
-harish.venkat

2

真の解決策は、完全なパスを出力し、不要なパスを除外し、最終的に出力を修正することです。

tree -df | egrep -v "\./(bin|unitTest)/.*" | sed -r 's%\./.*/%%g'

出力ですべてのファイルが必要な場合は、「d」パラメーターを削除します。

詳細については、http//qaon.net/press/archives/572をご覧ください。日本語が理解できる場合。


-fフラグは非常に便利です!
マイケルディミット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.