디렉토리 검색 시 검색 깊이 변경

디렉토리 검색 시 검색 깊이 변경

.txt파일이 포함된 모든 디렉터리를 찾고 싶습니다 . 하지만 이전 레벨을 인쇄해야 합니다.

예를 들어 재귀를 사용하여 현재 디렉터리에서 파일을 find검색합니다 . .txt그런 다음 해당 파일이 포함된 디렉터리만 표시됩니다.

find . -name "*.txt" -printf '%h\n'

(예를 들어)로 출력

./out/data
./out/data
./output/data

find따라서 다음 방법의 사용을 개선하고 싶습니다 .

  1. .txt중복된 디렉터리는 표시되지 않습니다. ( 그 안에 2개의 파일이 있기 때문인 것 같습니다 .)

  2. 첫 번째 레이어만 인쇄하고 싶습니다 ./out/../output/

답변1

좀 더 중심적인 접근 방식이 있을 수 있지만 find다른 도구를 사용하여 이를 도울 수 있습니다.

find . -name '*.txt' -printf '%h\n' | cut -f1,2 -d/ | sort -u

awk아니면 프로시저를 저장하고 다음과 같은 것을 사용할 수도 있을 것 같습니다.

find . -name '*.txt' -printf '%h\n' | awk -F/ '{matched[$1"/"$2]=1} END {for(dir in matched) {print dir}}'

답변2

다음과 같은 추가 처리를 위해 결과를 다른 도구로 전송해 보는 것은 어떨까요?

find . -name "*.txt" -printf '%h\n'| sort | uniq | cut -d'/' -f1,2   

답변3

sed경로의 첫 번째 디렉터리 이름만 유지하고 sort동등 실행의 첫 번째 줄만 유지 하는 데 사용됩니다 .

find . -name "*.txt" -printf '%h\n' |
sed -e 's#^\(\./[^/]*\).*#\1#' |
sort -u

관련 정보