如何在linux中递归计算某些文件的总大小

时间:2015-03-06 13:45:18

标签: linux bash shell diskspace du

我在一个布局中的文件夹中散布了一堆文件,例如:

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

我需要找到仅用于的MP4文件的总磁盘空间。这意味着它必须以某种方式递归。

我看了du并摆弄了grep的东西,但似乎无法弄清楚如何计算MP4文件,无论它们在哪里。

人类可读的总磁盘空间输出也是必须的,如果可能的话,最好是GB?

有什么想法吗?感谢

3 个答案:

答案 0 :(得分:8)

对于单个文件大小:

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

以GB为单位的总磁盘空间:

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

答案 1 :(得分:3)

您可以这样做:

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

find命令的-exec选项执行一个简单命令,其中{}作为find找到的文件。 du -b以字节为单位显示文件的大小。 awk命令将变量初始化为0并获取每个文件的大小以显示命令末尾的总数。

答案 2 :(得分:2)

这将汇总所有mp4文件大小(以字节为单位):

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