du 출력을 크기별로 정렬하는 방법은 무엇입니까?

du 출력을 크기별로 정렬하는 방법은 무엇입니까?

du -sh /dir/*사이즈별로 어떻게 정렬하나요 ? 를 사용하라는 웹사이트를 읽었 | sort -n지만 분명히 사실이 아닙니다. 이것은 잘못된 예입니다.

[~]# du -sh /var/* | sort -n
0       /var/mail
1.2M    /var/www
1.8M    /var/tmp
1.9G    /var/named
2.9M    /var/run
4.1G    /var/log
8.0K    /var/account
8.0K    /var/crash
8.0K    /var/cvs
8.0K    /var/games
8.0K    /var/local
8.0K    /var/nis
8.0K    /var/opt
8.0K    /var/preserve
8.0K    /var/racoon
12K     /var/aquota.user
12K     /var/portsentry
16K     /var/ftp
16K     /var/quota.user
20K     /var/yp
24K     /var/db
28K     /var/empty
32K     /var/lock
84K     /var/profiles
224M    /var/netenberg
235M    /var/cpanel
245M    /var/cache
620M    /var/lib
748K    /var/spool

답변1

GNU coreutils(대부분의 Linux 배포판에서 공통)가 있는 경우 다음을 사용할 수 있습니다.

du -sh -- * | sort -h

-h옵션은 sort입력이 사람이 읽을 수 있는 형식(단위가 있는 숫자, 1024를 기준으로 하므로 1023은 1K 미만으로 간주되며 이는 GNU의 접근 방식과 일치함 du -h)임을 나타냅니다.

이 기능2009년 8월 GNU 핵심 유틸리티 7.5에 추가됨.

노트:

이전 버전의 Mac OSX를 사용하는 경우 coreutils를 설치 한 brew install coreutils다음 .gsortsort

최신 버전의 macOS(Mojave에서 검증됨)는 sort -h기본적으로 지원됩니다.

답변2

사람이 읽을 수 있는 청크를 사용하는 대신 -k 플래그를 사용하여 1K 청크를 계산해 보세요. 그런 다음 쉽게 숫자로 정렬할 수 있는 공통 단위가 있습니다.

du -ck | sort -n

명시적으로 인간 단위를 요구하지는 않지만, 그렇게 한다면 할 수 있는 방법은 많습니다. 많은 사람들이 위의 1K 블록 기술을 사용한 다음 du를 두 번째 호출하는 것 같습니다.

https://serverfault.com/questions/62411/how-can-i-sort-du-h-output-by-size

추가된 KB 단위를 보려면 다음을 사용하세요.

du -k | sed -e 's_^\([0-9]*\)_\1 KB_' | sort -n

답변3

당신이 가지고 있지 않다면GNU coreutils의 최신 버전, 정렬 가능한 출력을 얻고 일부 후처리를 통해 인간 친화적인 출력을 생성하기 위해 du없이 호출할 수 있습니다 . 이는 버전에 해당 플래그가 없어도 -h작동한다는 장점이 있습니다 .du-h

du -k | sort -n | awk '
    function human(x) {
        if (x<1000) {return x} else {x/=1024}
        s="kMGTEPZY";
        while (x>=1000 && length(s)>1)
            {x/=1024; s=substr(s,2)}
        return int(x+0.5) substr(s,1,1)
    }
    {gsub(/^[0-9]+/, human($1)); print}'

SI 접미사가 필요한 경우(즉, 1024 대신 1000의 배수) while루프 본문에서 1024를 1000으로 변경합니다. (조건의 1000은 의도적인 것이므로 예를 들어 대신 을 얻습니다 1M. 1000k)

du크기를 바이트 단위로 표시하는 옵션이 있는 경우 ( -b-B 1: 디스크 사용량이 아닌 실제 파일 크기를 계산하는 부작용이 있을 수 있음) 시작 부분 s(예: s=" kMGTEPYZ";) 또는 if (x<1000) {return x} else {x/=1024}시작 부분에 공백을 추가하세요. 기능을 추가합니다 human.

1-10 범위의 숫자에 대해 소수점 이하 자릿수를 표시하는 것은 독자의 연습 문제로 남겨 둡니다.

답변4

OS X에서는 다음을 통해 필요한 coreutils를 설치할 수 있습니다.스스로 만든:

brew install coreutils

gsort이를 통해 무엇보다도 -h명령줄 인수를 갖게 됩니다 .

관련 정보