Come posso determinare la dimensione totale di una directory (cartella) dalla riga di comando?


787

Esiste un semplice comando per visualizzare la dimensione totale aggregata (utilizzo del disco) di tutti i file in una directory (cartella)?

Ho provato questi e non fanno quello che voglio:

  • ls -l, che visualizza solo la dimensione dei singoli file in una directory, né
  • df -h, che visualizza solo lo spazio libero e utilizzato sui miei dischi.



Ricordo amichevole che potrebbe avere quasi zero senso sul filesystem CoW come BTRFS.
val

Risposte:


1267

Il comando du"riepiloga l'utilizzo del disco di ciascun FILE, ricorsivamente per le directory", ad es.

du -hs /path/to/directory
  • -hè di ottenere i numeri "leggibili dall'uomo", ad esempio get 140Manziché 143260(size in KBytes)
  • -sè per un riepilogo (altrimenti otterrai non solo le dimensioni della cartella ma anche tutto ciò che è nella cartella separatamente)

Mentre stai usando -hpuoi ordinare i valori umani leggibili usando

du -h | sort -h

La -hbandiera su sortprenderà in considerazione i valori di dimensione "Human Readable".


Se si desidera evitare di elencare in modo ricorsivo tutti i file e le directory, è possibile fornire il --max-depthparametro per limitare il numero di elementi visualizzati. Più comunemente,--max-depth=1

du -h --max-depth=1 /path/to/directory

9
rispetto per andare oltre. :)
myusuf3

93
Io uso du -sho DOOSH come un modo per ricordarlo (NOTA: il comando è lo stesso, solo l'organizzazione dei flag della riga di comando per scopi di memoria)
Marco Ceppi

3
C'è un'utile opzione per du chiamata --apparent-size. Può essere utilizzato per trovare la dimensione effettiva di un file o directory (al contrario della sua impronta sul disco) ad esempio, un file di testo con solo 4 caratteri occuperà circa 6 byte, ma verrà comunque visualizzato come occupato ~ 4K in un normale output du -sh. Tuttavia, se si passa l'opzione --apparent-size, l'output sarà 6. man du dice: - dimensioni apparenti della stampa di dimensioni -apparent, anziché l'utilizzo del disco; sebbene la dimensione apparente sia generalmente più piccola, potrebbe essere più grande a causa di buchi nei file ("sparsi"), frammentazione interna, blocchi indiretti
Hopping Bunny

4
Questo funziona anche per OS X! Grazie, stavo davvero cercando un modo per cancellare i file, sia sul mio computer locale che sul mio server, ma i metodi automatizzati sembravano non funzionare. Quindi, ho corso du -hs *e sono andato nella directory più grande e ho scoperto quali file erano così grandi ... Questo è un buon metodo, e la parte migliore è che non devi installare nulla! Decisamente meritato il mio voto
Dev

@BandaMuhammadAlHelal Penso che ci siano due ragioni: arrotondamento ( duha un arrotondamento alquanto peculiare, non mostra decimali se il valore ha più di una cifra nell'unità scelta), e il classico problema del prefisso 1024 vs. 1000 . duha un'opzione -B(o --block-size) per cambiare le unità in cui visualizza i valori, oppure puoi usare -binvece di -hottenere il valore "grezzo" in byte.
Marcel Stimberg,

164

Di recente ho trovato un ottimo strumento interattivo basato su ncurses, che offre rapidamente una panoramica delle dimensioni delle directory. Ho cercato quel tipo di strumento per anni.

  • drilldown rapido nella gerarchia dei file
  • è possibile eliminare ad esempio enormi file temporanei dall'interno dello strumento
  • estremamente veloce

Pensalo come baobab per la riga di comando:

apt-get install ncdu

11
Questo è assolutamente fantastico! Come DaisyDisk, per OSX
subZero

3
ncduè fantastico! Dopo averlo installato, basta farlo ncdu /. Troverai molto rapidamente i file più grandi sul sistema. Inoltre, premere hall'interno dell'interfaccia della console di ncdu. Ha scorciatoie molto utili
vlad-ardelean

Questo è ESATTAMENTE quello di cui avevo bisogno: così semplice, così efficiente. Amore puro.
user3790897

52

Questo trova la dimensione in modo ricorsivo e la mette accanto al nome di ogni cartella, insieme alla dimensione totale in fondo, il tutto nel formato umano

du -hsc *

17

Godere!

du foldername

Maggiori informazioni su quel comando qui


10

tree è un altro comando utile per questo lavoro:

Basta installarlo tramite sudo apt-get install treee digitare quanto segue:

tree --du -h /path/to/directory
...
...

33.7M used in 0 directories, 25 files

Dall'albero dell'uomo :

-h    Print  the size of each file but in a more human readable way, e.g. appending a size letter for kilo‐
      bytes (K), megabytes (M), gigabytes (G), terabytes (T), petabytes (P) and exabytes (E).

--du  For each directory report its size as the accumulation of sizes of all its files and  sub-directories
      (and their files, and so on). The total amount of used space is also given in the final report (like
      the 'du -c' command.)

9

Di seguito è quello che sto usando per stampare il totale, la cartella e le dimensioni del file:

$ du -sch /home/vivek/* | sort -rh

Dettagli

 ------------------------------------------------------------
   -c, --total
          produce a grand total
   -h, --human-readable
          print sizes in human readable format (e.g., 1K 234M 2G)
   -s, --summarize
          display only a total for each argument
 -------------------------------------------------------------
   -h, --human-numeric-sort
          compare human readable numbers (e.g., 2K 1G)
   -r, --reverse
          reverse the result of comparisons

Produzione

 70M    total
 69M    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/lib
992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results
292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target
 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files

4

Le risposte hanno reso evidente che duè lo strumento per trovare la dimensione totale di una directory. Tuttavia, ci sono un paio di fattori da considerare:

  • Occasionalmente, l' duoutput può essere fuorviante perché riporta lo spazio allocato dal filesystem, che può essere diverso dalla somma delle dimensioni dei singoli file. In genere il filesystem alloca 4096 byte per un file anche se in esso è stato memorizzato solo un carattere!

  • Differenze di uscita dovute alla potenza di 2 e alla potenza di 10 unità. Il -hcommutatore dudivide il numero di byte per 2 ^ 10 (1024), 2 ^ 20 (1048576) ecc. Per fornire un output leggibile dall'uomo. Molte persone potrebbero essere più abituate a vedere poteri di 10 (ad esempio 1K = 1000, 1M = 1000000) e rimanere sorpresi dal risultato.

Per trovare la somma totale delle dimensioni di tutti i file in una directory, in byte, eseguire:

find <dir> -ls | awk '{sum += $7} END {print sum}'

Esempio:

$ du -s -B 1
255729664

$ find .  -ls | awk '{sum += $7} END {print sum}'
249008169

Find-ls-awk restituirà un valore errato per le cartelle di grandi dimensioni n . 1 . Per i nuovi awk puoi aggiungere --bignumo -M; se questa non è un'opzione usa find . -ls | tr -s ' '|cut -d' ' -f 7| paste -sd+ |bc # 2 .
goozez,

Se i poteri di 2 in uso sono un problema, c'è l' --siopzione: "come -h, ma usa poteri di 1000 e non di 1024"
muru,

1

Solo per le dimensioni della directory in un formato leggibile, utilizzare quanto segue:

du -hs directoryname

Questo probabilmente non è nella sezione corretta, ma dalla riga di comando, potresti provare:

ls -sh filename

La -sdimensione è, e -hè leggibile dall'uomo.

Utilizzare -lper mostrare lsnell'elenco, come di seguito:

ls -shl

0

du /foldernameè il comando standard per conoscere le dimensioni di una cartella. È consigliabile trovare le opzioni leggendo la pagina man:

man du

Dovresti leggere la pagina man (disponibile online ) prima di usare il comando.


0

Ecco uno script POSIX che funzionerà con:

  • Un file
  • File
  • Una directory
  • Elenchi
#!/bin/sh
ls -ARgo "$@" | awk '{q += $3} END {print q}'

fonte


0

Se la directory desiderata ha molte sottodirectory, utilizzare quanto segue:

$ cd ~/your/target/directory
$ du -csh 

-c, --total produce un totale complessivo
-s, --summarize mostra solo un totale per ogni argomento
-h, - formati di stampa leggibili dall'uomo in formato leggibile dall'uomo (es. 1K 234M 2G)

che quindi produrrebbe un totale complessivo dell'utilizzo della memoria da parte di tutti i file / cartelle nella directory corrente.


-1

Il migliore che penso sia il seguente:

du -h directory_name | tail -n1

Questo ti mostrerà solo le dimensioni della directory che ti interessa e non stamperà le dimensioni di qualsiasi directory e file all'interno di quella directory.

Dovrei aggiungere che se la dimensione della cartella è grande, allora du impiega più tempo. Devi essere paziente affinché questo comando funzioni. Proprio come qualsiasi altro comando unix, puoi scoprire il tempo totale per questo processo usando timeprima di questo comando:

time du -h directory_name | tail -n1

6
duha un'opzione per questo:-s
muru
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.