2015-03-06 14 views
6

Ho un gruppo di file sparsi cartelle in un layout, ad esempio:Come calcolare la dimensione totale di determinati file solo, ricorsivi, in linux

dir1/somefile.gif 
dir1/another.mp4 
dir2/video/filename.mp4 
dir2/some.file 
dir2/blahblah.mp4 

e ho bisogno di trovare il disco totale spazio utilizzato per i file MP4 solo. Ciò significa che deve essere ricorsivo in qualche modo.

Ho guardato allo du e mi sono divertito a fare il piping con grep ma non riesco a capire come calcolare solo i file MP4, non importa dove siano.

Un output di spazio su disco totale leggibile dall'uomo è un must, preferibilmente in GB, se possibile?

Qualche idea? Grazie

risposta

5

Per dimensioni singolo file:

find . -name "*.mp4" -print0 | du -sh --files0-from=- 

Per lo spazio disco totale in GB:

find . -name "*.mp4" -print0 | du -sb --files0-from=- | awk '{ total += $1} END { print total/1024/1024/1024 }' 
+0

Stavo anche per suggerire il primo comando. Dato che si passa '-s' dovrebbe già essere riassunto, ma hey elenca le dimensioni per ogni singolo file se viene passato' --files0-from'. Questo sembra un bug, non è vero? – hek2mgl

+0

Dalla pagina man: '-s, mostra solo un totale per ogni argomento'. Qui ogni file passato su input standard è un argomento diverso. '-s' è utile con le directory. –

+0

Provare a rimuovere 'print0' da find e rimuovere l'opzione --files0-from. Ora calcolerà il totale mentre stiamo ancora passando più argomenti di file – hek2mgl

2

Ciò riassumere tutte le dimensioni file mp4 in byte:

find ./ -name "*.mp4" -printf "%s\n" | paste -sd+ | bc 
2

Puoi semplicemente fare:

find -name "*.mp4" -exec du -b {} \; | awk 'BEGIN{total=0}{total=total+$1}END{print total}' 

L'opzione -exec del comando find esegue un comando semplice con {} come il file trovato da find. du -b visualizza la dimensione del file in byte. Il comando awk inizializza una variabile su 0 e ottiene la dimensione di ciascun file per visualizzare il totale alla fine del comando.

Problemi correlati