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

17

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

du folder | sort -n

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

du -h folder

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

Come unire du folder e du -h folder per vedere l'output ordinato come du folder , ma con la prima colonna da du -h folder

P.S. Questo è solo un esempio. questa tecnica potrebbe essere molto utile per me (se possibile)

    
posta UAdapter 17.11.2011 - 18:02

8 risposte

10

Ecco un approccio più generale. Ottieni l'output di du folder e du -h folder in due file diversi.

du folder > file1
du -h folder > file2

La parte fondamentale è questa: concatena file1 e file2 riga per riga, con un delimitatore adatto.

paste -d '#' file1 file2 > file3

(assumendo che # non appaia in file1 e file2 )

Ora ordina file3 . Nota che questo ordinerà in base al contenuto di file1 e interrompe i legami in base al contenuto di file2 . Estrai il risultato pertinente usando cut :

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

Dai anche un'occhiata a man sort per altre 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 di terminale ed esegui il tuo nuovo alias:

sorted-du /home
    
risposta data Prateek 17.11.2011 - 18:56
28

Prova qualcosa del tipo:

du -h folder | sort -h

Alternative: -n per l'ordinamento numerico

Nota: l'opzione -h di sort esiste solo nelle versioni più recenti di Ubuntu.

    
risposta data Allu2 17.11.2011 - 18:13
4

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

Sfortunatamente la risposta accurata che classifica K M G è difficile e complessa:

Puoi aliasare l'intero comando du con uno che classifica leggibile l'uomo 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

link

solo cd nella cartella che vorresti sapere allora duf

potresti aggiungere questo alias duf alla fine di /home/user/.profile per rendere il comando duf semi-permenant

Risultati:

% Bl0ck_qu0te%

Ecco perché du -sch /var/* | sort -n non funziona vedi l'ordinamento di MKKMMKKMMK

% Bl0ck_qu0te%     
risposta data Kat Amsterdam 30.08.2012 - 19:30
2

Comando GNU sort ha la seguente opzione:

% Bl0ck_qu0te%

Quindi il comando dovrebbe essere:

du -ah . | sort -rh | head -20
    
risposta data kenorb 05.03.2015 - 15:25
0

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

Uso sempre un modulo per trovare i file fuori controllo.

    
risposta data belacqua 05.06.2013 - 00:22
0

Apri il tuo terminale con Ctrl + Alt + t e scrivi:

  du -sk * | sort -rn 
    
risposta data Ten-Coin 23.12.2013 - 14:40
0

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

du -s * | sort -n | cut -f2 | tr '\n' '
368K    diskmanagementd
392K    racoon
468K    coreaudiod
472K    securityd
660K    sshd
3.6M    php-fpm
' | xargs -0 -I {} du -sh "{}"

che risulta in:

du -s * | sort -n | cut -f2 | tr '\n' '
368K    diskmanagementd
392K    racoon
468K    coreaudiod
472K    securityd
660K    sshd
3.6M    php-fpm
' | xargs -0 -I {} du -sh "{}"
    
risposta data Mark Crossfield 23.11.2014 - 20:38
0

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

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

awk '{print $2}' stampa sostanzialmente i nomi dei file.

    
risposta data yahiaelgamal 30.03.2014 - 10:55

Leggi altre domande sui tag