파일이 너무 많은 큰 디렉토리가 있습니다 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