디렉토리의 깊이를 찾는 방법

디렉토리의 깊이를 찾는 방법

주어진 디렉토리 트리의 최대 깊이를 찾는 방법이 있습니까? maxlength를 늘리고 발견된 디렉터리 수를 비교하기 위해 find를 사용할 생각인데 더 쉬운 방법이 있을까요?

답변1

한 가지 방법은 GNU를 가정하는 것입니다 find.

find . -type d -printf '%d\n' | sort -rn | head -1

이것은 특별히 효율적이지는 않지만, -maxdepth다른 것을 차례로 시도하는 것보다 확실히 낫습니다.

답변2

예를 들어 나무의 최대 깊이를 찾으려면 다음을 /사용하십시오.

find / -type d

/각 디렉토리는 깊이에 관계없이 제공됩니다. 따라서 awk결과는 /개수를 찾는 구분 기호이며 count-1 트리의 최대 깊이를 제공하므로 /명령은 다음과 같습니다.

find / -type d | awk -F"/" 'NF > max {max = NF} END {print max}'

답변3

updatedbthen 사용을 고려해보세요 locate. 데이터베이스를 쿼리할 때 locate매우 빠르게 수행되며 각 파일을 개별적으로 요청하는 것보다 훨씬 빠릅니다. updatedb데이터베이스를 다시 생성하지 않고 변경 사항만 업데이트하기 때문에 속도도 빠릅니다. 유일한 단점은 updatedb자체 사용자 공간 데이터베이스를 생성하고 유지하지 않는 한 기본적으로 실행하려면 루트 권한이 필요할 수 있다는 것입니다.

locate파일 이름에 개행 문자가 포함될 수 있으므로 출력을 처리할 때 더욱 주의해야 합니다. 파일 이름 구분 기호로 null 바이트를 사용하는 것이 더 좋습니다.

그것들을 추가하세요:

updatedb && locate -0 "$(pwd)" | awk -v RS='\0' -F"/" '{print NF-1}' | sort -n | tail -n1

완벽한 awk 스크립트를 제공해준 @sai sasanka에게 감사드립니다.

관련 정보