다음과 같이 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
및 명령은 검색 디렉토리를 제외하고 검색 패턴을 찾기 위해 tree
find를 사용하는 것입니다 .prune
tree -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}’
첫 번째 패턴은 제외이고, 두 번째 패턴은 포함입니다.