ottenere dimensioni approssimative della directory (inclusi ricorsivamente tutti i file e le sottodirectory)


10

C'è un modo per ottenere rapidamente una dimensione precisa per una directory (incluse, ricorsivamente, tutte le sue sottodirectory)? Non voglio le dimensioni dei sottodiri, intendo solo che dovrebbero essere ricorsivamente incluse nelle dimensioni totali riportate.

In caso contrario, un modo per ottenere una dimensione approssimativa? Sto pensando a qualcosa del genere dfche produce una risposta rapida per l'intero file system, ma questa volta per una directory specifica (ed è sottodirectory).

Le soluzioni che usano dusembrano impiegare anni quando viene data una directory che contiene migliaia di directory secondarie.


L'uso duè l'unico metodo di cui sono a conoscenza. Il problema è che i dati sono diffusi in tutta la gerarchia, quindi devono essere conteggiati da uno strumento per ottenere i conteggi.
slm

Risposte:


15

Trovo che sia abbastanza utile.

du -sm Directory

o per avere una suddivisione delle directory interne

du -sm Directory/*

e poi con una specie se ha molti sottodir

du -sm Directory/* | sort -n 

Il motivo per cui utilizzo l'opzione -m è per assicurarmi di ottenere un output di megabyte. Trovo che sia più facile per me confrontare visivamente (quando non riesco a ottenere una combinazione di unità, ad esempio confrontare 999 KB e 1 MB rispetto a 999000 MB e 1000000 MB), il vantaggio aggiuntivo è che è possibile passare l'output in ordine.

Metti tutto in background e reindirizza l'output, ci vorrà del tempo qualunque sia il metodo che usi, è una traversata di molti file che richiederà tempo.

du -sm Directory/* | sort -nr > ~/cacheDu.log &

Annota l' ordinamento inverso in modo che quelli grandi siano all'inizio. Aggiungi questo a cron run ogni n min.

Quindi, con un ducache alias, hai un utilizzo della directory abbastanza aggiornato.

export alias ducache='head -n 15 ~/cacheDu.log'

@X Tian vedi il mio commento sulla risposta di glenn jackman
Marcus Junius Brutus,

Accettato, è per questo che uso -m e ordina
X Tian,

3
Ricorda shopt -s dotglob, altrimenti du -sm Directory/*non conterà i file / le directory nascosti.
Dmitry Grigoryev il

@XTian mi dispiace ma non sono stato in grado di aiutarmi così alcuni comandi .
Maveň ツ

L'ho preso da qui
Maveň ツ

5
du -sh "$dir"

ti fornirà un riepilogo delle dimensioni totali nell'output formattato "umano".


Dal momento che stavi cercando un'alternativa a du, ho provato find, ma è esattamente lo stesso:

$ find . -printf "%s\n" | { 
    sum=0
    while read size; do ((sum+=size)); done
    echo $sum
}
122865202884
$ du -sb .
122865202884    .

Grazie, ne sono consapevole, ma durichiede troppo tempo poiché produce un risultato accurato. Speravo in uno strumento / comando che fornisse una risposta approssimativa veloce e sporca.
Marco Junius Bruto

C'è dfma funziona su tutto il filesystem.
Glenn Jackman,

1

Potrebbe non piacerti la mia risposta, ma penso che il modo migliore di fare quello che vuoi sia eseguire regolarmente i "du -s" in background usando cron e archiviando il risultato in un file. Quindi, quando si desidera un valore approssimativo, utilizzare il valore dal file. Puoi decidere con quale frequenza eseguire il du. Non vedo un modo più veloce per ottenere il valore. Il comando du è efficiente per quello che fa.

L'unico altro modo per farlo molto rapidamente è creare un filesystem per la directory, quindi df ti darà la risposta che desideri molto rapidamente.

Se è più veloce sapere tutto nel file system tranne la tua directory, puoi eseguire df per il file system, du per tutto tranne che la tua directory e sottrarre.


0

Non soddisfa esattamente le tue esigenze (non la stampa su una riga) ma è più semplice di altre soluzioni:

du -a -h | sort -hr | head -2

Questo comando ti darà la dimensione della directory e della sottodirectory e la dimensione del file o della sottodirectory più grandi nella directory corrente.

PS: Nel head -2caso in cui una sottodirectory occupi tutto il posto della directory corrente e sia in ascolto prima della corrente.

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.