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

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

次のようにtreeコマンドを使用して結果をフィルタリングする例を教えてください。

  • ディレクトリを無視(たとえばbin、、unitTest
  • 拡張子を持つ特定のファイルのみをリストします(例.cpp、、、、、).c.hpp.h
  • 基準を満たす結果ファイルの絶対パス名のみを指定してください。

答え1

-I1つの方法は、スイッチとモードを使用することです-P

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

ここでは、パターンからパイプで区切られたファイルを除いて、-f各ファイルのフルパスを印刷します。-Iこの-Pスイッチには、特定の拡張子と一致するパターンで一覧表示されたファイルのみが含まれます。

答え2

使用find法とコマンドは、検索ディレクトリを除いて検索パターンを見つけるためにtreefindを使用することです。prunetree -P

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

例えば。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

答え3

実際の解決策は、フルパスを出力し、不要なパスをフィルタリングし、最後に出力を修正することです。

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

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

詳細な説明は以下で確認できます。http://qaon.net/press/archives/572日本語が理解できれば。

答え4

awkを使用してください:

tree -f | awk ‘!/bin|unitTest/ && /\.cpp|\.c|\.hpp|\.h/ {print}’

最初のパターンは除外され、2番目のパターンは含まれます。

関連情報