큰 디렉토리에서 최대 파일 크기를 찾는 방법

큰 디렉토리에서 최대 파일 크기를 찾는 방법

파일이 너무 많은 큰 디렉토리가 있습니다 ls. 내 생각: 다음을 사용하십시오.

find . -name * -exec wc -c < {} \; | sort | tail -n 1

문제: 쉘은 이것을 ( find . -name * -exec wc -c) < ( {} \;) ... 로 해석합니다.

< {}파일 이름 이 sort.

나도 시도했다

find . -name "*" -exec cat {} +| wc -c

그러나 이는 다음과 같이 해석되는 것 같습니다. ( find . -name "*" -exec cat {}) | ( wc -c) - 전체 파일을 합친 크기를 나타냅니다.

아직 하나 있어요du의 변형을 사용하세요-- 그러나 가장 큰 파일은 아마도 몇 바이트만 떨어져 있기 때문에 크기가 500KB인 백만 개의 파일만 표시됩니다. 다시 말하지만 ls가 처리하기에는 너무 많습니다.

답변1

가장 큰 파일(KB 단위 크기)을 인쇄하려면엘에스방법:

ls -S1s --block-size=K | sed -n '2{p;q;}'

  • -S- 파일 크기별로 정렬(큰 파일부터)

  • -s- 각 파일의 할당된 크기를 블록 단위로 출력

  • -1- 한 줄에 하나의 파일 나열

  • sed -n '2{p;q;}'- 출력의 첫 번째 줄 ls은 크기가 있는 줄입니다 total(예 total 388K: ). 두 번째 줄은 가장 큰 파일과 크기를 포함하는 줄입니다. 이 표현식은 두 번째 필수 행만 고려합니다.

답변2

파일 이름에 개행 문자( \n)가 포함되어 있지 않고 GNU 유틸리티가 있다고 가정하면 이를 빠르고 간단한 솔루션으로 사용할 수 있습니다.

find . -maxdepth 1 -type f -exec stat --fmt $'%s\t%n' {} + | sort -n | tail -1

-maxdepth 1검색에 포함해야 하는 하위 디렉터리가 있으면 삭제하세요. find터미네이터를 지원하지 않는 경우에는 +덜 효율적인 터미네이터로 교체할 수 있습니다 \;. '%s'파일 이름을 출력하지 않으려면 형식 문자열을 .


파일 이름에 인쇄할 수 없는 문자가 포함된 경우 다음과 같은 느린 변형을 사용할 수 있습니다.

find . -maxdepth 1 -type f -exec stat --printf "%s\t" {} \; -print | sort -n | tail -1

-print파일 이름 출력을 정말로 원하지 않으면 삭제하십시오.


OSX의 경우 이와 같은 명령을 사용할 수 있을 것 같지만 테스트할 쉬운 방법이 없습니다. -print파일 이름 출력이 필요하지 않으면 다음을 제거하십시오.

find . -maxdepth 1 -type f -exec stat -f '%z' -n {} \; -print | sort -n | tail -n 1

관련 정보