사람이 읽을 수있는 크기를 숫자로 정렬하려면 어떻게합니까?


20

예를 들어 공간 폴더의 양을 보여주는 명령이 있습니다.

du folder | sort -n

그것은 잘 작동하지만 인간이 읽을 수있는 형태를 갖고 싶습니다.

du -h folder

그러나 그렇게하면 숫자로 정렬 할 수 없습니다.

조인 du folder하고 du -h folder출력을로 정렬 하는 방법은 du folder이지만 첫 번째 열은du -h folder

추신. 이것은 단지 예일뿐입니다. 이 기술은 나에게 매우 유용 할 수 있습니다 (가능한 경우).

답변:


11

보다 일반적인 접근 방식은 다음과 같습니다. 의 출력 취득 du folderdu -h folder두 개의 서로 다른 파일을.

du folder > file1
du -h folder > file2

중요한 부분은 다음과 같습니다 . 적절한 구분 기호를 사용하여 연결 file1하고 file2한 줄씩 표시합니다.

paste -d '#' file1 file2 > file3

( 및에 #나타나지 않는 것으로 가정 )file1file2

이제 정렬하십시오 file3. 이것은 file1내용을 기준으로 정렬하고 내용별로 연결을 끊습니다 file2. 다음을 사용하여 관련 결과를 추출하십시오 cut.

sort -n -k1,7 file3 | cut -d '#' -f 2

man sort다른 옵션도 살펴보십시오 .


나중에 재사용 할 수 있도록이를 별칭으로 저장할 수도 있습니다. 이렇게하려면 아래에 다음을 추가하십시오 ~/.bashrc.

sorted-du () {
    paste -d '#' <( du "$1" ) <( du -h "$1" ) | sort -n -k1,7 | cut -d '#' -f 2
}

그런 다음 새 터미널 세션을 열고 새 별명을 실행하십시오.

sorted-du /home

솔루션을 별칭으로 만드는 방법에 대한 마지막 부분을 추가했습니다.
SirCharlo

1
별명으로 실제 파일을 사용하고 그 뒤에 rm을 호출하는 것은 정말 나쁜 생각입니다 ! file3디렉토리에 실제로 이름이 지정된 파일이 있으면 어떻게되는지 생각해보십시오 . @SirCharlo이 답변에서 별칭 정의를 제거하고 더 안전한 것으로 대체하고 있습니다.
jmiserez

askubuntu.com/a/80248/22308 간단하게이 작업을 수행sort -h
남 G VU

36

다음과 같은 것을 시도하십시오 :

du -h folder | sort -h

대안 : -n숫자 정렬 용

참고 : -h정렬 옵션은 최신 버전의 Ubuntu에만 있습니다.


3
버전 8.17이 있으므로 이것이 가장 쉬운 방법 인 것 같습니다
steabert

1
sort 명령이 sort --version = 8.17에서 개선되었음을 지적한 steabert에게 감사합니다. 이것은 최신 버전의 Ubuntu에 가장 적합한 방법입니다.
Kat Amsterdam

다음과 같은 방법으로 OP를 해결합니다.sort -h
Nam G VU

4

이 답변은 10.04.4LTS 및 하위 버전의 우분투에 유효합니다 .

불행히도 KMG를 분류하는 정확한 대답은 어렵고 복잡합니다.

이것을 사용하여 사람이 읽을 수 있도록 정렬하는 명령으로 전체 du 명령의 별명을 지정할 수 있습니다

alias duf='du -sk * | sort -n | perl -ne '\''($s,$f)=split(m{\t});for (qw(K M G)) {if($s<1024) {printf("%.1f",$s);print "$_\t$f"; last};$s=$s/1024}'\'

내가 여기서 찾은

http://www.earthinfo.org/linux-disk-usage-sorted-by-size-and-human-readable/

단지 CD 폴더에 당신은 알고 싶습니다 DUF

이 duf 별명을 /home/user/.profile의 끝에 추가하여 duf 명령을 반영구적으로 만들 수 있습니다.

결과 :

user@hostname:~$ duf
0.0K  Documenten
0.0K  Muziek
0.0K  Openbaar
0.0K  Sjablonen
0.0K  Video's
4.0K  backup_db.sql.g
4.0K  examples.desktop
12.0K xml printer ticket
52.0K hardinfo_report.html
152.0K    librxtxSerial.so
2.7M  jpos
4.4M  nxclient_3.5.0-7_amd64.deb
6.4M  nxnode_3.5.0-4_amd64.deb
6.8M  Downloads
7.4M  nxserver_3.5.0-5_amd64.deb
12.4M NetBeansProjects
18.1M mysqlworkbench.deb
28.3M Afbeeldingen
45.8M ergens-20110928-18.sql.gz
60.5M 2012-06-02ergens_archive.tar.gz
65.5M 2012-08-26ergens_archive.tar.gz
65.6M 2012-08-28ergens_archive.tar.gz
65.6M 2012-08-29ergens_archive.tar.gz
65.7M 2012-08-30ergens_archive.tar.gz
113.0M    Bureaublad
306.2M    ergens-20110928-18.sql

du -sch /var/* | sort -n작동하지 않는 이유 는 MKKMMKKMMK의 정렬을 참조하십시오.

user@hostname:~$ du -sch /var/* |sort -n

0 /var/crash
0 /var/local
0 /var/lock
0 /var/opt
8,0M  /var/backups
12K   /var/games
16K   /var/tmp
17M   /var/log
68M   /var/cache
104K  /var/spool
144K  /var/run
351M  /var/lib
443M  totaal
704K  /var/mail

나는 정렬 기능으로 du -h 기능을 개선하기 위해 기능 요청을 gnu-core 개발자에게보고했습니다. via bugs-coreutils@gnu.org
Kat Amsterdam

+1, 비슷한 one-liner :du folder | sort -n | cut -f 2 | while IFS= read -r -d '' path; do du -sh -- "$path"; done
steabert

라이브 시스템에서 1 개의 라이너를 사용해보십시오. 액세스 거부 오류가 발생하고 결과는 나타나지 않습니다. 우분투 시스템에서이 명령을 먼저 시도 했습니까? 나는 / 홈 / 사용자 이름 폴더를 변경
캣 암스테르담에게

아, 죄송합니다 -d ''. 파일 명령의 출력에서을 사용하지 않아도됩니다.
steabert

이것은 GNU를 지원하지 않는 비 리눅스 시스템에서 잘 작동하는 것 같습니다 sort.
Stefan Lasiewski

2

GNU 명령 sort에는 다음과 같은 옵션이 있습니다.

-h, --human-numeric-sort (예를 들어, 2K 1G) 사람이 읽을 수있는 번호를 비교합니다.

BSD / OSX에이 옵션을 사용하려면, 당신은 설치할 수 있습니다 sort에서 coreutils(통해 brew)와에 bin 폴더를 추가 PATH하여로 RC의 파일입니다.

따라서 명령은 다음과 같습니다.

du -ah . | sort -rh | head -20

0

최신 버전의 Ubuntu에는을 사용하십시오 du -h directory | sort -h.

제어 할 수없는 파일을 찾기 위해 항상이 형식을 사용합니다.


11 월 17 일 11시 17 분 13 초에 복제 Allu2
Geek

0

Ctrl+ Alt+로 터미널을 열고 다음을 t입력하십시오.

  du -sk * | sort -rn 

: DI는 이제 필요한 형식을 내 Xpad에 붙여 넣을 수 있도록 Ctrl + Alt + t를 위의 형식으로 변경하는 데 사용됩니다. : D 그러한
정신적 인

여기서 당신이 한 모든 일은 보완 할 가치가 있습니다.
rɑːdʒɑ

0

이것은 공백이나 아포스트로피가있는 파일 이름을 처리하며 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

교체의 시점 무엇 \n과는 \0? 너무 늦지 않습니까?
muru

입력을 준비합니다.이 경우 입력은 xargs -0NUL로 구분됩니다 (find -print0이 생성하는 것처럼). 그렇지 않으면 -0을 사용할 수 없으며 아포스트로피에는 특별한 의미가 있습니다.
Mark Crossfield

에 대해 알고 -0있지만 관련이 없습니다 : imgur.com/87w3vfj
muru

나는 당신이 아포스트로피가 아닌 백틱을 사용했을 때 효과가 있다고 생각합니다. gist.github.com/mrmanc/8aef830945ce03aa65f0
Mark Crossfield

0

버전에 관계없이 모든 시스템에서 작동하는 것으로 나타났습니다 (작동 sort -h하지 않습니다).

du -h $(du * | sort -n | awk '{print $2}')

awk '{print $2}'기본적으로 파일 이름을 인쇄합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.