Come faccio a ordinare numericamente le dimensioni leggibili dall'uomo?


20

ad esempio ho un comando che mostra quanto spazio occupa la cartella

du folder | sort -n

funziona benissimo, tuttavia mi piacerebbe avere una forma leggibile dall'uomo

du -h folder

tuttavia, se lo faccio, non posso ordinarlo come numerico.

Come unirsi du foldere du -h foldervedere l'output ordinato come du folder, ma con la prima colonna dadu -h folder

PS questo è solo un esempio. questa tecnica potrebbe essere molto utile per me (se possibile)

Risposte:


11

Ecco un approccio più generale. Ottieni l'output di du foldere du -h folderin due file diversi.

du folder > file1
du -h folder > file2

La parte fondamentale è questa: concatenare file1e file2riga per riga, con un delimitatore adatto.

paste -d '#' file1 file2 > file3

(supponendo #che non compaia in file1e file2)

Adesso ordina file3. Si noti che questo ordinerà in base al file1contenuto e interromperà i legami per file2contenuto. Estrarre il risultato pertinente utilizzando cut:

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

Dai un'occhiata anche ad man sortaltre opzioni.


Puoi anche salvarlo come alias, per riutilizzarlo in seguito. Per fare ciò, aggiungi quanto segue in fondo a ~/.bashrc:

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

Quindi, apri una nuova sessione terminale ed esegui il tuo nuovo alias:

sorted-du /home

Ho aggiunto l'ultima parte su come trasformare la tua soluzione in un alias.
SirCharlo,

1
Usare file reali in un alias (e quindi chiamare rm su di essi) è davvero una pessima idea ! Pensa a cosa accadrebbe se avessi effettivamente un file chiamato file3nella mia directory, verrebbe sovrascritto e quindi cancellato! @SirCharlo Sto rimuovendo la definizione di alias da questa risposta e sostituendola con qualcosa di più sicuro.
jmiserez,

Bene askubuntu.com/a/80248/22308 semplicemente fare questo consort -h
Nam G VU

36

Prova qualcosa del tipo:

du -h folder | sort -h

Alternative: -nper l'ordinamento numerico

Nota: l' -hopzione di ordinamento esiste solo nelle versioni più recenti di Ubuntu.


3
ce n'è nella versione 8.17, quindi immagino che questo sia il modo più semplice
steabert il

1
Grazie a steabert per aver sottolineato che il comando sort è stato migliorato da sort --version = 8.17 Questa è la risposta migliore per le versioni più recenti di Ubuntu.
Kat Amsterdam,

Questo dovrebbe essere quello accettato perché risolve l'OP consort -h
Nam G VU il

4

Questa risposta è valida per 10.04.4LTS e versioni precedenti di Ubuntu.

Sfortunatamente la risposta accurata che ordina KMG è difficile e complessa:

Puoi alias l'intero comando du con uno che ordina la lettura umana usando questo

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

che ho trovato qui

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

basta cd nella cartella che vorresti sapere quindi Duf

potresti aggiungere questo alias duf alla fine del tuo /home/user/.profile per rendere il comando duf semi-permanente

i risultati:

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

Ecco perché du -sch /var/* | sort -nnon funziona vedere l'ordinamento di 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

Ho segnalato questo agli sviluppatori gnu-core con una richiesta di funzionalità per migliorare la funzione du -h con una funzione di ordinamento. via bugs-coreutils@gnu.org
Kat Amsterdam,

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

Ho appena provato il tuo 1 liner su un sistema live. Ricevi un errore Accesso negato e nessun risultato. Hai provato prima questo comando su un sistema Ubuntu? Ho cambiato la cartella in / home / username
Kat Amsterdam il

oh, scusa, dovresti eliminare il -d '', che è rimasto dall'usarlo sull'output del comando file.
steabert,

Questo sembra funzionare alla grande su sistemi non Linux che non supportano GNU sort.
Stefan Lasiewski,

2

Il comando GNU sortha la seguente opzione:

-h, --human-numeric-sort confronta i numeri leggibili dall'uomo (ad es. 2K 1G).

Per avere questa opzione su BSD / OSX, puoi installare sortda coreutils(via brew) e aggiungere la cartella bin al tuo PATHnei tuoi file rc .

Quindi il comando sarebbe simile a:

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

0

Per le versioni recenti di Ubuntu, utilizzare du -h directory | sort -h.

Ne uso sempre una forma per trovare file fuori controllo.


Duplicato con risposta 17 novembre 11 alle 17:13 Allu2
Elder Geek

0

Apri il tuo terminale con Ctrl+ Alt+ te digita:

  du -sk * | sort -rn 

: DI ora sono abituato a cambiare Ctrl + Alt + t nel formato sopra così tanto che ho incollato il formato richiesto sul mio Xpad. : D È fantastico essere complimentati per un lavoro così umile :)
lavoro il

Ogni lavoro che hai fatto qui merita un complemento.
rʒɑdʒɑ

0

Questo gestisce i nomi di file con spazi bianchi o apostrofi e funziona su sistemi che non supportano xargs -do sort -h:

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

che si traduce in:

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

Qual è il punto di sostituire \ncon \0? Non è un po 'troppo tardi per quello?
muru,

prepara l'input per xargs -0, che prevede che l'input sia delimitato da NUL (come produrrebbe find -print0). Altrimenti non puoi usare -0 e gli apostrofi hanno un significato speciale.
Mark Crossfield,

Lo so -0, ma è irrilevante: imgur.com/87w3vfj
muru,

Penso che funzioni come hai usato un backtick, non un apostrofo. gist.github.com/mrmanc/8aef830945ce03aa65f0
Mark Crossfield

0

Quello che ho trovato funzionante su tutti i sistemi indipendentemente dalla versione (sort -h non funziona per me) è

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

il awk '{print $2}'fondo stamperà i nomi dei file.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.