2012-02-08 26 views
15

Ho una directory con una tonnellata di file Voglio trovare la dimensione media dei file di questi file quindi qualcosa come ls somethinghere che cosa fa la dimensione media dei file di tutto ciò che incontra?Unix trova la dimensione media del file

+1

Probabilmente correlato a questa domanda (la soluzione è probabilmente il pipe output di 'ls' in' awk' per fare la media): http://stackoverflow.com/questions/2419690/average-and-maximum-size- di-directories – DNA

+0

Non è 'ls -l' enought? – sinsedrix

+1

'code' ls -l 'code' non ha nulla in totale o in media. – Tony

risposta

30

ho trovato qualcosa qui:
http://vivekjain10.blogspot.com/2008/02/average-file-size-within-directory.html

per calcolare la dimensione media dei file all'interno di una directory su un sistema Linux, a seguito di comando può essere utilizzato:

ls -l | gawk '{sum += $5; n++;} END {print sum/n;}' 
+0

non è sicuro che importi, ma sto usando cygwin su una casella W2K8 R2 ... – Tony

+1

Dovrebbe funzionare, hai provato ? Se ottieni 'no gawk', passa a 'awk' In bocca al lupo – shellter

+0

Non sembra che faccia qualcosa che va giù alla riga successiva> – Tony

4

Utilizzare wc -c * per ottenere la dimensione di tutti i file e ls | wc -l per ottenere il numero di file. Quindi dividi l'uno con l'altro.

+0

nah stavo loking per un comando come Ernstsson suggerito ma cygwin non sembra gradire quella sintassi :( – Tony

16

A breve, generale e recursion- variazione amichevole di risposta Ernstsson 's:

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

Oppure, per esempio, se yo vuoi impedire ai file superiori a 100 KB di stufare la media:

find ./ -size -100000c -ls | awk '{sum += $7; n++;} END {print sum/n;}' 
+0

@ A-B-B, cosa intendi? Tutto funziona, l'ho usato molte volte. Si prega di fornire maggiori dettagli su quale problema si sta avendo, perché non ho idea di cosa stai parlando. – cnst

+0

@ A-B-B "Eliminato dalla dir corrente e dai sottodirectory." - intendevi dire che le directory sono incluse nel calcolo delle dimensioni? Questo è molto intenzionale - la ragione per cui ho scritto questo script è di calcolare la dimensione media del file per i file piccoli (e le directory) per determinare un buon blocco o dimensione del frammento per 'mfs' (altrimenti, si userebbe' -type f' con ['find'] (http://mdoc.su/o/find.1)). Quindi l'esempio '-size', per tenere conto solo di un paio di file di grandi dimensioni. Il tuo -1 è molto immeritato, e il tuo lamento che non ho provato questo è maleducato, soprattutto perché non c'è nulla di sbagliato nella risposta. – cnst

+1

Il motivo per cui lo stai usando è interessante ma irrilevante. Se quello che voglio la dimensione media del file, come indicato nella domanda originale, presumibilmente non voglio che le directory influenzino questo numero, punto! Per quanto riguarda il -1, non è solo per te; la risposta principale lo ha ottenuto anche. –

2

du -sh. # indica lo spazio totale utilizzato dalla directory

find. -tipo f | wc -l # conta il numero di file

divide il primo al secondo. Se si desidera un uno di linea, eccolo:

echo $((`du -sb | tr '.' ' '`/`find . -type f | wc -l`)) 
+0

FYI, questo usa '' b equivalente a '--apparent-size --block-size = 1'' – Xen2050

1

stanno trovando la dimensione di una directory e trovare la quantità di spazio libero su disco che esiste sulla vostra macchina. Il comando che useresti per trovare la dimensione della directory è "du". E per trovare lo spazio libero su disco puoi usare 'df'.

Tutte le informazioni presenti in questo articolo sono disponibili nelle pagine man di du e df. Nel caso in cui ti stia annoiando leggendo le pagine man e vuoi svolgere velocemente il tuo lavoro, allora questo articolo è per te.

-

'du' - Trovare la dimensione di una directory

$ du 

Digitando il sopra al prompt ti dà una lista di directory che esistono nella directory corrente con le loro dimensioni. L'ultima riga dell'output fornisce la dimensione totale della directory corrente incluse le sue sottodirectory. La dimensione indicata include le dimensioni dei file e le directory presenti nella directory corrente e tutte le relative sottodirectory. Nota che per impostazione predefinita le dimensioni indicate sono in kilobyte.

**$ du /home/david** 

Il comando sopra dovrebbe darvi la dimensione della directory/home/David

**$ du -h** 

Questo comando ti dà una migliore uscita da quello predefinito. L'opzione '-h' indica il formato leggibile dall'uomo. Quindi le dimensioni dei file/directory sono ora suffissate con una "k" se i suoi kilobyte e "M" se i suoi Megabyte e "G" se i suoi Gigabyte.

**$ du -ah** 

Questo comando visualizzerà nella sua uscita, non solo le directory, ma anche tutti i file che sono presenti nella directory corrente. Nota che 'du' conta sempre tutti i file e le directory dando la dimensione finale nell'ultima riga. Ma '-a' mostra i nomi dei file insieme ai nomi delle directory nell'output. '-h' è ancora una volta formato leggibile dall'uomo.

Questo ti dà un totale complessivo come l'ultima riga dell'output. Pertanto, se la directory occupa 30 MB, le ultime 2 righe dell'output saranno

30M. 30M totale

La prima riga sarebbe l'ultima riga predefinita dell'output "du" che indica la dimensione totale della directory e un'altra riga che visualizza la stessa dimensione, seguita dalla stringa "totale". Questo è utile nel caso in cui questo comando insieme al comando grep visualizzi solo la dimensione totale finale di una directory come mostrato di seguito.

**$ du -ch | grep total** 

Ciò avrebbe una sola linea nell'output che visualizza la dimensione totale della directory corrente comprese tutte le sottodirectory.

Nota: nel caso in cui non si abbia familiarità con le tubazioni (che rendono possibile il comando sopra riportato) fare riferimento all'articolo 24. Anche grep è uno dei comandi più importanti in Unix. Fare riferimento all'articolo 25 per saperne di più su grep.

**$ du -s** 

Questo visualizza un riepilogo delle dimensioni della directory. È il modo più semplice per conoscere la dimensione totale della directory corrente.

**$ du -S** 

Ciò visualizzerebbe la dimensione della directory corrente che esclude la dimensione delle sottodirectory esistenti in quella directory. Quindi in pratica mostra la dimensione totale di tutti i file esistenti nella directory corrente.

**$ du --exculde=mp3** 

Il comando sopra dovrebbe visualizzare la dimensione della directory corrente insieme con tutte le sottodirectory, ma sarebbe escludere tutti i file aventi il ​​modello dato presente nei loro nomi. Pertanto, nel caso precedente, se ci sono file mp3 nella directory corrente o in una delle sue sottodirectory, la loro dimensione non verrebbe inclusa durante il calcolo della dimensione totale della directory.

  • 'df' - trovare l'utilizzo del disco spazio libero/disk

    $ df

Digitando quanto sopra, emette un tavolo composto da 6 colonne. Tutte le colonne sono molto facili da capire. Ricorda che le colonne 'Size', 'Used' e 'Avail' usano kilobyte come unità. La colonna "Usa%" mostra l'utilizzo come percentuale che è anche molto utile.

Visualizza lo stesso risultato del comando precedente ma '-h' indica il formato leggibile dall'uomo. Quindi invece di kilobyte come unità l'output dovrebbe avere "M" per Megabyte e "G" per Gigabyte.

La maggior parte degli utenti non utilizza gli altri parametri che possono essere passati a "df". Quindi non parlerò di loro.

A turno mostrerò un esempio che uso sulla mia macchina. In realtà ho memorizzato questo come uno script chiamato "utilizzo" poiché lo uso spesso.

Esempio:

ho il mio Linux installato su/dev/hda1 e ho montato le mie partizioni di Windows, nonché (per impostazione predefinita ogni volta che avvio di Linux). Quindi 'df' di default mi mostra l'utilizzo del disco del mio Linux e delle partizioni Windows. E mi interessa solo l'uso del disco delle partizioni Linux. Questo è quello che uso:

**$ df -h | grep /dev/hda1 | cut -c 41-43** 

Questo comando visualizza il seguente sulla mia macchina

45%

Fondamentalmente questo comando fa 'df' visualizzare le uso del disco di tutte le partizioni e quindi estrae il linee con/dev/hda1 poiché mi interessa solo questo. Quindi taglia i caratteri dalla 41a alla 43a colonna poiché sono le colonne che visualizzano l'utilizzo in%, che è quello che voglio.

Ci sono alcune altre opzioni che possono essere utilizzate con "du" e "df". Li puoi trovare nelle pagine man.

Problemi correlati