2015-03-06 21 views
6

Mam kilka plików rozproszone w całej folderów w układzie, npJak obliczyć całkowity rozmiar niektórych plików tylko, rekurencyjnych, w linux

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

I muszę znaleźć całkowitą dysku przestrzeń używana dla plików MP4 tylko. Oznacza to, że w jakiś sposób musi być rekurencyjny.

Spojrzałem na du i robiąc rzeczy do grep, ale nie wiem, jak obliczyć tylko pliki MP4 bez względu na to, gdzie się znajdują.

Czytelna dla człowieka całkowita ilość miejsca na dysku jest koniecznością, najlepiej w GB, jeśli to możliwe?

Wszelkie pomysły? Dzięki

Odpowiedz

5

Dla indywidualnego rozmiar pliku:

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

Dla całkowitego miejsca na dysku w GB:

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

Chciałem także zasugerować pierwsze polecenie. Ponieważ przekazujesz '-s', to powinno już to podsumować, ale hej wymienia rozmiary dla każdego pojedynczego pliku, jeśli' --files0-from' jest przekazywane. To wygląda na błąd, prawda? – hek2mgl

+0

Ze strony podręcznika: -s, wyświetla tylko sumę dla każdego argumentu. Tutaj każdy plik przekazywany na standardowe wejście jest innym argumentem. '-s' jest użyteczne w katalogach. –

+0

Spróbuj usunąć 'print0' z find i usunąć opcję --files0-z. Teraz obliczy sumę, podczas gdy wciąż przekazujemy wiele argumentów pliku. – hek2mgl

2

Będzie sumują wszystkie rozmiary plików MP4 w bajtach:

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

Ty możliwe, po prostu wykonaj:

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

Opcja -exec polecenia find wykonuje proste polecenie z {} jako plikiem znalezionym przez find. du -b wyświetla rozmiar pliku w bajtach. Komenda awk inicjalizuje zmienną na 0 i pobiera rozmiar każdego pliku, aby wyświetlić sumę na końcu polecenia.