用于多个包含和排除的树命令

用于多个包含和排除的树命令

您能否给我一个使用 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

usefindtree命令是使用 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}’

第一个模式是您的排除项,第二个是您的包含项。

相关内容