2015-03-06 3 views
6

Я получил кучу файлов, разбросанных по папкам в макете, например:Как рассчитать общий размер некоторых файлов только рекурсивные, в Linux

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

И мне нужно, чтобы найти общий диск пространство, используемое для файлов MP4 только. Это означает, что это должно быть рекурсивным.

Я просмотрел du и путался с вещами трубопроводов до grep, но не может понять, как рассчитать только файлы MP4 независимо от того, где они находятся.

Человеческий читаемый итоговый объем дискового пространства является обязательным, желательно в Великобритании, если это возможно?

Любые идеи? Благодаря

ответ

5

Для индивидуального размера файла:

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

Для общего дискового пространства в ГБ:

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

Я также собирался предложить первую команду. Поскольку вы передаете '-s', он должен уже суммировать, но он перечисляет размеры для каждого отдельного файла, если передается' --files0-from'. Это похоже на ошибку, не так ли? – hek2mgl

+0

Из man-страницы: '-s, отображают только общее для каждого аргумента'. Здесь каждый файл, переданный на стандартный ввод, является другим аргументом. '-s' полезен для каталогов. –

+0

Попробуйте удалить 'print0', чтобы найти и удалить параметр -files0-from. Теперь он рассчитает общее число, пока мы все еще передаем несколько аргументов файла. – hek2mgl

2

Это просуммировать все mp4 файлы размером в байтах:

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

Вы можете просто выполните:

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

Параметр -exec команды find выполняет простую команду с {} как файл, найденный с помощью find. du -b отображает размер файла в байтах. Команда awk инициализирует переменную в 0 и получает размер каждого файла для отображения итоговой суммы в конце команды.