多个包含和排除的树命令


33

您能否给我一个使用tree命令过滤结果的示例,如下所示:

  • 忽略目录(说binunitTest
  • 只有上市具有一定的扩展名的文件(比如说.cpp.c.hpp.h
  • 仅提供符合条件的结果文件的完整路径名。

Answers:


54

一种方法是通过-I-P开关使用模式:

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

-f每个文件打印的完整路径,并且-I不包括在模式中的文件通过这里竖线分隔。所述-P开关inlcudes唯一的文件中匹配一定的延伸的图案。


6
注意:-I标志中不要包含斜杠,例如-I bin,不能-I bin/
ThorSummoner 2015年

这使得一个错误sed: illegal option -- I
弗朗索瓦·罗曼

4

use findtree使用find的命令prune排除搜索目录,并tree -P用于搜索模式。

使用修剪开关,例如,如果要排除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


对我而言,带有find的示例给出了错误“查找:预期在'-o'之后的表达式”
WebComer

您尝试了find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o还是find . -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标志超级有用!
Michael Dimmitt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.