왜 이것이 작동하지 않습니까?
find / -ls 2>/dev/null | awk '$7 > max {max = $7}; END {print max}'
이것은 작동합니다:
find / -printf "%s\n" 2>/dev/null | sort -nr |head -n1
첫 번째는 7달러가 파일 크기인데 왜 안되는지 모르겠네요.
답변1
출력에서 일곱 번째 필드의 크기를 얻을 수 없습니다.find / -ls
- 장치 파일의 경우 장치 주요 번호를 얻을 수 있습니다.
- 사용자 이름 또는 그룹 이름에 공백 문자가 포함된 경우
- 파일 경로(심볼릭 링크의 대상 포함)에 개행 문자가 있는 경우.
또한 이러한 파일 중 일부는 가상일 수도 있습니다. 예를 들어 /proc/kcore
내 시스템에는 시스템의 가상 메모리 주소 공간인 128TiB가 있습니다.
또한 겉보기 크기는 디스크 사용량과 동일하지 않습니다. truncate -s15T file
예를 들어 디스크 공간을 차지하지 않는 15TiB 스파스 파일을 생성합니다. %b
가장 많은 디스크 공간을 차지하는 파일을 찾으려면 이 옵션을 사용하십시오.
귀하가 받게 될 연락은 이러한 방법에 따라 달라질 수 있습니다.
find / -xdev -printf '%b %p\0' 2> /dev/null |
sort -zk1rn | head -zn1 | tr '\0' '\n'
(가장 무겁고 어휘 순서에서 첫 번째인 경우)
또는:
find / -xdev -printf '%b %p\0' 2> /dev/null|
awk -v max=-1 -v RS='\0' '
$1 > max {max = $1; out = $0}
END {if (max >= 0) print out}'
(가장 무거움, 동점일 경우 무작위).
디스크 사용량은 512바이트 단위로 표시됩니다. 읽기 또는 검색 권한이 없는 디렉터리의 파일은 고려되지 않습니다.
-xdev
검색을 하나의 파일 시스템(이 경우 루트 파일 시스템)으로 제한합니다.
-printf
이것은 -z
GNU 확장이라는 점에 유의하십시오 . -v RS='\0'
또한 비표준입니다.
모든 연락처 신고(특정 순서 없음):
find / -xdev -printf '%b %p\0' 2> /dev/null |
awk -v max=-1 -v RS='\0' '
$1 == max {out = out ORS $0; next}
$1 > max {max = $1; out = $0}
END {if (max >= 0) print out}'
답변2
이상한. 그러나 나는 이것이 작동하도록 했습니다:
sudo find /boot -ls | awk '$7 > max {name = $11 ; max = $7}; END {print name" "max}'