Jak sortować według rozmiarów czytelnych dla człowieka?

20

na przykład mam polecenie, które pokazuje, ile zajmuje miejsce w folderze

du folder | sort -n

działa świetnie, jednak chciałbym mieć czytelną dla człowieka formę

du -h folder

jednak jeśli to zrobię, nie będę mógł sortować liczbowo.

Jak dołączyć du folderi du -h folderzobaczyć wyniki posortowane według du folder, ale z pierwszą kolumną oddu -h folder

PS to tylko przykład. ta technika może być dla mnie bardzo przydatna (jeśli to możliwe)

UAdapter
źródło

Odpowiedzi:

11

Oto bardziej ogólne podejście. Uzyskaj wyjście du folderi du -h folderw dwóch różnych plikach.

du folder > file1
du -h folder > file2

Kluczowe jest to: konkatenacja file1i file2linia po linii, z odpowiednim ogranicznikiem.

paste -d '#' file1 file2 > file3

(zakładając, #że nie pojawia się w file1i file2)

Teraz sortuj file3. Pamiętaj, że sortowanie będzie sortowane według file1zawartości i zrywa powiązania według file2zawartości. Wyodrębnij odpowiedni wynik, używając cut:

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

Zobacz także man sortinne opcje.


Możesz również zapisać to jako alias, do późniejszego ponownego wykorzystania. Aby to zrobić, dodaj następujące elementy na dole ~/.bashrc:

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

Następnie otwórz nową sesję terminala i uruchom nowy alias:

sorted-du /home
Prateek
źródło
Dodałem ostatnią część, w jaki sposób przekształcić swoje rozwiązanie w alias.
SirCharlo,
1
Używanie rzeczywistych plików w aliasach (a następnie wywoływanie na nich rm) to naprawdę naprawdę zły pomysł ! Zastanów się, co by się stało, gdybym rzeczywiście miał plik o nazwie file3w moim katalogu, zostanie on nadpisany, a następnie usunięty! @ SirCharlo Usuwam definicję aliasu z tej odpowiedzi i zastępuję ją czymś bezpieczniejszym.
jmiserez
Cóż askubuntu.com/a/80248/22308 po prostu zrób to zsort -h
Nam G VU
36

Wypróbuj coś takiego:

du -h folder | sort -h

Alternatywy: -ndo sortowania numerycznego

Uwaga: -hopcja sortowania istnieje tylko w nowszych wersjach Ubuntu.

Allu2
źródło
3
jest w wersji 8.17, więc chyba jest to najłatwiejszy sposób
steabert
1
Dzięki Steabert za wskazanie, że komenda sort została ulepszona z sort --version = 8.17 To najlepsza odpowiedź dla nowszych wersji Ubuntu.
Kat Amsterdam,
To powinna być akceptowana przyczyna, dla której to czyste strzelanie rozwiązuje POsort -h
Nam G VU
4

Ta odpowiedź jest ważna dla 10.04.4LTS i niższych wersji Ubuntu.

Niestety, dokładna odpowiedź, która sortuje KMG, jest trudna i złożona:

Za pomocą tego można aliasować całe polecenie du za pomocą polecenia, które sortuje czytelne dla ludzi

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}'\'

które znalazłem tutaj

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

po prostu cd do folderu, który chcesz wiedzieć, a następnie duf

możesz dodać ten alias duf na końcu pliku /home/user/.profile, aby polecenie duf było półprzemijające

wyniki:

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

Oto dlaczego du -sch /var/* | sort -nnie działa sortowanie 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
Kat Amsterdam
źródło
Zgłosiłem to programistom GNU-Core z prośbą o ulepszenie funkcji du-h za pomocą funkcji sortowania. via [email protected]
Kat Amsterdam
+1, podobny liniowiec:du folder | sort -n | cut -f 2 | while IFS= read -r -d '' path; do du -sh -- "$path"; done
steabert
Właśnie wypróbowałem 1 linijkę na systemie na żywo. Błąd „Odmowa dostępu” i brak wyników. Czy najpierw wypróbowałeś to polecenie w systemie Ubuntu? Zmieniłem folder na / home / nazwa użytkownika
Kat Amsterdam
och, przepraszam, powinieneś upuścić -d '', to pozostałość po użyciu go na wyjściu polecenia file.
steabert
Wydaje się, że działa to świetnie na systemach innych niż Linux, które nie obsługują GNU sort.
Stefan Lasiewski,
2

Polecenie GNU sortma następującą opcję:

-h, --human-numeric-sort porównaj liczby czytelne dla ludzi (np. 2K 1G).

Aby mieć tę opcję w BSD / OSX można zainstalować sortz coreutils(przez brew) i dodać folder bin do PATHw swoim rc plików.

Polecenie wyglądałoby więc tak:

du -ah . | sort -rh | head -20
kenorb
źródło
0

W przypadku najnowszych wersji Ubuntu użyj du -h directory | sort -h.

Cały czas używam tej formy do znajdowania plików poza kontrolą.

Belacqua
źródło
Duplikat odpowiedzi, która została odebrana 17 listopada 11 17:13 Allu2
Starszy Geek
0

Otwórz terminal za pomocą Ctrl+ Alt+ ti wpisz:

  du -sk * | sort -rn 
rɑːdʒɑ
źródło
: DI jestem teraz przyzwyczajony do zmiany Ctrl + Alt + t do powyższego formatu tak, że wkleiłem wymagany format do mojego Xpad. : D Czuje się wspaniale za tak
hojną
Każda praca, którą tu wykonałeś, jest warta uzupełnienia.
rɑːdʒɑ
0

Ten obsługuje nazwy plików z białymi znakami lub apostrofami i działa w systemach, które nie obsługują xargs -dlub sort -h:

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

Co skutkuje w:

368K    diskmanagementd
392K    racoon
468K    coreaudiod
472K    securityd
660K    sshd
3.6M    php-fpm
Mark Crossfield
źródło
Jaki jest sens wymiany \nz \0? Czy nie jest na to za późno?
mur
przygotowuje dane wejściowe, dla xargs -0których oczekuje się, że dane wejściowe będą rozdzielane przez NUL (tak jak tworzyłoby find -print0). W przeciwnym razie nie możesz użyć -0, a apostrofy mają specjalne znaczenie.
Mark Crossfield,
Wiem o tym -0, ale to nie ma znaczenia: imgur.com/87w3vfj
mur
Myślę, że to działa, ponieważ użyłeś tyknięcia, a nie apostrofu. gist.github.com/mrmanc/8aef830945ce03aa65f0
Mark Crossfield
0

Ten, który działał na wszystkich systemach, niezależnie od wersji ( sort -hnie działa dla mnie), to

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

w awk '{print $2}'zasadzie drukuje nazwy plików.

yahiaelgamal
źródło