2010-07-11 17:26:29 +0000 2010-07-11 17:26:29 +0000
316
316

Come ottenere le dimensioni riassunte delle directory e delle loro sottodirectory?

Diciamo che voglio ottenere la dimensione di ogni directory di un file system Linux. Quando uso ls -la non ottengo la dimensione riassuntiva delle cartelle.

Se uso df ottengo la dimensione di ogni file system montato, ma anche questo non mi aiuta. E con du ottengo la dimensione di ogni sottodirectory e il riassunto dell'intero file system.

Ma voglio avere solo la dimensione riassuntiva di ogni directory all'interno della cartella ROOT del file system. C'è un comando per ottenere questo?

Risposte (9)

450
450
450
2010-07-11 17:28:23 +0000

Questo fa quello che state cercando:

du -sh /*
``` ```
du -sh /* | sort -h

Cosa significa:

  • -s per dare solo il totale per ogni argomento della riga di comando.
  • -h per suffissi leggibili dall'uomo come M per megabyte e G per gigabyte (opzionale).
  • /* si espande semplicemente a tutte le directory (e file) in /.

È utile anche l'ordinamento per dimensione:

&001

Qui:

  • -h assicura che sort interpreti correttamente i suffissi leggibili dall'uomo.
84
84
84
2010-07-29 12:07:31 +0000

Spesso ho bisogno di trovare le directory più grandi, quindi per ottenere una lista ordinata contenente i 20 dirs più grandi faccio questo:

du -m /some/path | sort -nr | head -n 20

In questo caso le dimensioni saranno riportate in megabyte.

24
24
24
2015-12-24 10:07:52 +0000

Mi piace usare Ncdu per questo, si può usare il cursore per navigare e perforare la struttura delle directory che funziona davvero bene.

12
12
12
2012-11-22 16:53:04 +0000

Le risposte esistenti sono molto utili, forse qualche principiante (come me) troverà utile anche questo.

  1. Anello molto semplice, ma per me questo è stato un buon inizio per alcune altre operazioni relative alle dimensioni:

  2. Molto simile alla prima risposta e quasi lo stesso risultato di 1.), ma mi ci è voluto un po’ di tempo per capire la differenza tra * e ./* se in una sottodirectory:

9
9
9
2010-07-11 17:29:10 +0000

La seguente invocazione du dovrebbe funzionare sui sistemi BSD:

du -d 1 /
5
5
5
2015-07-24 11:04:13 +0000

Non è facile. Il comando du mostra i file e le cartelle (predefinito) o solo le dimensioni di tutti gli elementi che si specificano nella riga di comando (opzione -s).

Per ottenere gli elementi più grandi (file e cartelle), ordinati, con dimensioni leggibili dall'uomo su Linux:

du -h | sort -h

Questo vi seppellirà in una tonnellata di piccoli file. Potete sbarazzarvene con --threshold (1 MB nel mio esempio):

du --threshold=1M -h | sort -h

Il vantaggio di questo comando è che include cartelle a punti nascosti (cartelle che iniziano con .).

Se volete veramente solo le cartelle, dovete usare find ma questo può essere molto, molto lento poiché du dovrà scansionare molte cartelle più volte:

find . -type d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h
2
2
2
2013-10-05 15:36:58 +0000

Siate consapevoli, che non è possibile confrontare le directory con du su diversi sistemi/macchine senza esserne sicuri, entrambi condividono la stessa dimensione di blocco del filesystem. Questo potrebbe contare se si sincronizzano alcuni file da una macchina linux ad un nas e si vuole confrontare la directory sincronizzata da soli. Si potrebbero ottenere risultati diversi con du a causa delle diverse dimensioni di blocco…..

1
1
1
2010-07-12 19:42:17 +0000

Si consiglia di controllare anche xdiskusage . Vi darà le stesse informazioni, ma mostrate graficamente, oltre a permettere il drill down (molto utile). Ci sono altre utilità simili per KDE e anche per Windows.

1
1
1
2016-12-20 09:56:34 +0000

Si potrebbe usare ls in combinazione con awk:

ls -al * | awk 'BEGIN {tot=0;} {tot = tot + $5;} END {printf ("%.2fMb\n",tot/1024/1024);}'

L'uscita di ls è convogliata a awk. awk inizia ad elaborare i dati. Il delimitatore standard è lo spazio. La variabile somma tot è inizializzata a zero; la seguente dichiarazione viene eseguita per ogni riga/linea emessa da ls. Essa si limita ad aumentare tot con la dimensione. $5 sta per quinta colonna (outputted by ls). Alla fine si divide per (1024*1024) per sommare in megabyte.

Se si vuole convertire questo in uno script o in una funzione (.bashrc) si può anche usare per ottenere la dimensione di alcuni sottoinsiemi di directory, secondo i tipi di file.

Se si desidera informazioni a livello di sistema, kdirstat può essere utile!