您能否给我一个使用 tree 命令过滤结果的示例,如下所示:
- 忽略目录(例如
bin
,unitTest
) - 仅列出具有扩展名的某些文件(例如
.cpp
,.c
,.hpp
,.h
) - 仅提供符合条件的结果文件的完整路径名。
答案1
-I
一种方法是将模式与和开关一起使用-P
:
tree -f -I "bin|unitTest" -P "*.[ch]|*.[ch]pp." your_dir/
打印-f
每个文件的完整路径,并-I
排除此处模式中由竖线分隔的文件。该-P
开关仅包含与特定扩展名匹配的模式中列出的文件。
答案2
usefind
和tree
命令是使用 find 来prune
排除搜索目录并用于tree -P
搜索模式。
使用 prune 开关,例如,如果您想排除目录,只需在 find 命令中misc
添加 a 即可。-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}’
第一个模式是您的排除项,第二个是您的包含项。