it-swarm-ko.tech

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
209
xenoterracide

GNU coreutils (대부분의 Linux 배포판에서 일반적으로 사용됨)가있는 경우 사용할 수 있습니다

du -sh -- * | sort -h

-h 옵션은 sort에 입력이 사람이 읽을 수있는 형식 (단위는 1024 기반임을 나타냄)으로 1023이 1K 미만으로 간주되어 GNU du -h 않습니다).

이 기능 GNU 2009 년 8 월 핵심 유틸리티 7.5 에 추가되었습니다.

참고 :

이전 버전의 Mac OSX를 사용하는 경우 brew install coreutilsgsort의 드롭 인 대체로 sort를 사용하십시오.

최신 버전의 macOS (Mojave에서 확인)는 sort -h 기본적으로.

268
Shawn J. Goff

-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
49
pboin

최근 버전 GNU coreutils 이없는 경우 -h없이 du을 (를) 호출하여 정렬 가능한 출력을 얻을 수 있습니다. 약간의 사후 처리로 인간 친화적 인 출력을 생성합니다. 이는 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";) human 함수의 시작 부분에 if (x<1000) {return x} else {x/=1024}을 추가하십시오.

1-10 범위의 숫자에 대한 소수 자릿수 표시는 독자에게 연습으로 남습니다.

sort -h가없는 경우 다음을 수행 할 수 있습니다.

du -sh * | sed 's/\([[:digit:]]\)\t/\1B\t/' | sed 's/\(.\t\)/\t\1/' | sed 's/G\t/Z\t/' | sort -n -k 2d,2 -k 1n,1 | sed 's/Z\t/G\t/'

이것은 du 목록을 가져 와서 접미사를 분리하고 그것을 사용하여 정렬합니다. <1K의 접미사가 없기 때문에 첫 번째 sed는 B (바이트)를 추가합니다. 두 번째 sed는 숫자와 접미사 사이에 구분 기호를 추가합니다. 세 번째 sed는 G보다 Z를 변환하여 M보다 큽니다. 테라 바이트 파일이 있으면 G를 Y로, T를 Z로 변환해야합니다. 마지막으로 두 열을 기준으로 정렬 한 다음 G 접미사를 바꿉니다.

9
Shawn J. Goff

OS X에서는 Homebrew 를 통해 필요한 coreutils를 설치할 수 있습니다.

brew install coreutils

이것으로 gsort가 있습니다. 여기에는 -h 명령 줄 매개 변수.

6
Roland

이 작은 펄 스크립트는 트릭을 수행합니다. duh (또는 원하는대로)로 저장하고 duh /dir/*

#!/usr/bin/Perl -w
use strict;

my @line;

sub to_human_readable {
        my ($number) = @_;
        my @postfix = qw( k M G T P );
        my $post;
        my $divide = 1;
        foreach (@postfix) {
                $post = $_;
                last if (($number / ($divide * 1024)) < 1);
                $divide = $divide * 1024;
        }
        $number = int($number/$divide + 0.5);
        return $number . $post;
}

sub trimlengthright {
        my ($txt, $len) = @_;
        if ( length($txt) >= $len ) {
                $txt = substr($txt,0,$len - 1) . " ";
        } else {
                $txt = $txt . " " x ($len - length($txt));
        }
        return $txt;
}

sub trimlengthleft {
        my ($txt, $len) = @_;
        if ( length($txt) >= $len ) {
                $txt = substr($txt,0,$len - 1) . " ";
        } else {
                $txt = " " x ($len - length($txt)) . $txt;
        }
        return $txt;
}

open(DF,"du -ks @ARGV | sort -n |");
while (<DF>) {
        @line = split;
        print &trimlengthleft(&to_human_readable($line[0]),5)," "; # size
        print &trimlengthright($line[1],70),"\n"; # directory
}
close DF;
4
ddeimeke

Ubuntu 10.04, CentOS 5.5, FreeBSD 및 Mac OS X에서 사용하는 내용은 다음과 같습니다.

www.geekology.co.za/earthinfo.org 에서 아이디어를 빌 렸으며 "Linux Server Hacks에서 악명 높은 ducks "에 의해 O'Reilly. 나는 여전히 내 필요에 적응하고 있습니다. 이것은 여전히 ​​진행중인 작업입니다 (현재 아침 기차 에서이 작업을하고있었습니다).

#! /usr/bin/env bash
ducks () {
    du -cks -x | sort -n | while read size fname; do
        for unit in k M G T P E Z Y; do
            if [ $size -lt 1024 ]; then
                echo -e "${size}${unit}\t${fname}"
                break
            fi
            size=$((size/1024))
        done
    done
}
ducks > .ducks && tail .ducks

출력은 다음과 같습니다.

[email protected]:~ $ ducks
32M src
42M .cpan
43M .macports
754M    doc
865M    Work
1G  .Trash
4G  Library
17G Downloads
30G Documents
56G total

[email protected]:~ $
1
Stefan Lasiewski

GNU sort -h, 대부분의 UNIX 환경에서 작동합니다.

join -1 2 -2 2 <(du -sk /dir/* 2>/dev/null | sort -k2,2) <(du -sh /dir/* 2>/dev/null | sort -k2,2) | sort -nk2,2 | awk '{ print $3 "\t" $1 }'
1
friedl.otto

이 스크립트로 미치십시오-

$du -k ./* | 
> sort -nr |
> awk '
> {split("KB,MB,GB",size,",");}
> {x = 1;while ($1 >= 1024) {$1 = $1 / 1024;x = x + 1} $1 = sprintf("%-4.2f%s", $1, size[x]); print $0;}'
1
jaypal singh

명령 :

du -ah . | sort -k1 -h | tail -n 50

설명 :

  • 현재 디렉토리에있는 모든 파일/폴더의 크기를 사람이 읽을 수있는 형식으로 재귀 적으로 나열합니다.

du -ah .

  • 첫 번째 열에있는 사람이 읽을 수있는 크기를 정렬하고 최대 50을 유지하십시오.

sort -k1 -h | tail -n 50

0
Rohan Ghige

가장 큰 것은 바닥에 있습니다.

du -sh * | sort -h
0
Meskan

공백이나 아포스트로피가있는 파일 이름을 처리하며 xargs -d 또는 sort -h를 지원하지 않는 시스템에서 작동합니다.

du -s * | sort -n | cut -f2 | tr '\n' '\0' | xargs -0 -I {} du -sh "{}"

결과 :

368K    diskmanagementd
392K    racoon
468K    coreaudiod
472K    securityd
660K    sshd
3.6M    php-fpm
0
Mark Crossfield

그러면 출력이 크기의 내림차순으로 정렬됩니다.

du -sh /var/* | sort -k 1rn

이렇게하면 출력이 크기 순서대로 증가합니다.

du -sh /var/* | sort -k 1n

추신 : 이것은 모든 열을 기준으로 정렬하는 데 사용할 수 있지만 열 값은 동일한 형식이어야합니다

0
user5337995

Solaris에서 테스트되었습니다!

du -kh | sort -nk1 | grep [0-9]K && du -kh | sort -nk1 | grep [0-9]M && du -kh | sort -nk1 | grep [0-9]G

이것은 모든 디렉토리 크기를 재귀 적으로 출력 할 것이고, 맨 아래는 기가 바이트에서 가장 큰 디렉토리이고 킬로바이트에서 가장 작은 디렉토리입니다.

0
Chuguniy