.txt
파일이 포함된 모든 디렉터리를 찾고 싶습니다 . 하지만 이전 레벨을 인쇄해야 합니다.
예를 들어 재귀를 사용하여 현재 디렉터리에서 파일을 find
검색합니다 . .txt
그런 다음 해당 파일이 포함된 디렉터리만 표시됩니다.
find . -name "*.txt" -printf '%h\n'
(예를 들어)로 출력
./out/data
./out/data
./output/data
find
따라서 다음 방법의 사용을 개선하고 싶습니다 .
.txt
중복된 디렉터리는 표시되지 않습니다. ( 그 안에 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