次のようにtreeコマンドを使用して結果をフィルタリングする例を教えてください。
- ディレクトリを無視(たとえば
bin
、、unitTest
) - 拡張子を持つ特定のファイルのみをリストします(例
.cpp
、、、、、).c
.hpp
.h
- 基準を満たす結果ファイルの絶対パス名のみを指定してください。
答え1
-I
1つの方法は、スイッチとモードを使用することです-P
。
tree -f -I "bin|unitTest" -P "*.[ch]|*.[ch]pp." your_dir/
ここでは、パターンからパイプで区切られたファイルを除いて、-f
各ファイルのフルパスを印刷します。-I
この-P
スイッチには、特定の拡張子と一致するパターンで一覧表示されたファイルのみが含まれます。
答え2
使用find
法とコマンドは、検索ディレクトリを除いて検索パターンを見つけるためにtree
findを使用することです。prune
tree -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番目のパターンは含まれます。