여러 포함 및 제외에 대한 트리 명령


33

tree 명령을 사용하여 다음과 같이 결과를 필터링하는 예를 들어 주시겠습니까?

  • (예를 들어 디렉토리 무시 bin, unitTest)
  • 단지 확장자를 가진 특정 파일을 나열 (말 .cpp, .c, .hpp, .h)
  • 기준과 일치하는 결과 파일의 전체 경로 이름을 제공합니다.

답변:


54

한 가지 방법은 -I-P스위치에 패턴을 사용하는 것입니다 .

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

-f각 파일의 전체 경로를 출력하고, -I패턴에서 제외 파일은 여기에 수직 막대로 구분. -P스위치 inlcudes는 파일 만 특정 확장자를 패턴 매칭에 나열된.


6
참고 : -I 플래그에 슬래시를 포함하지 마십시오 (예 : -I binnot) -I bin/.
ThorSummoner

이 오류가 있습니다sed: illegal option -- I
프랑수아 로맹에게

4

사용 findtree사용의 발견이다 명령의 prune검색 및 사용의 디렉토리를 제외하는 tree -P패턴을 검색하십시오.

예를 들어 misc디렉토리 를 제외하려면 -path ./misc -prune -ofind 명령에 a 를 추가 하십시오.

예를 들어. 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'뒤에 식을 예상했습니다"오류를 발생
시킵니다

당신은 시도 않았다 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.