다중 포함 및 제외에 대한 트리 명령

다중 포함 및 제외에 대한 트리 명령

다음과 같이 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

사용 find및 명령은 검색 디렉토리를 제외하고 검색 패턴을 찾기 위해 treefind를 사용하는 것입니다 .prunetree -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}’

첫 번째 패턴은 제외이고, 두 번째 패턴은 포함입니다.

관련 정보