如何找到某些指定文件的大小?

时间:2009-05-23 19:11:18

标签: file size sum

该命令尝试总结大小:

find . -iname "*.dmg" -exec du -sh '{}' \; 3&> /dev/null |
    awk '{print $1}' | summming_up_program???

您能找到更简单的解决方案吗?

Ubuntu解决方案。感谢Awk-end to Ayman。

find . -iname "*.dmg" -printf '%b\n' |
    awk 'BEGIN { s = 0 } {s += $1 } END { print "%dMB", s / 2^20 }'

4 个答案:

答案 0 :(得分:3)

find . -iname '*.dmg' -exec stat -f '%z' '{}' \; |
     awk 'BEGIN { s = 0 } {s += $1 } END { print s }'

stat用于获取文件的大小。 awk用于汇总所有文件大小。

编辑:

不分叉stat的解决方案:

find . -iname '*.dmg' -ls | 
     awk 'BEGIN { s = 0 } {s += $7 } END { print s }'

答案 1 :(得分:1)

wc -c *.pyc | tail -n1 | cut -f 1 -d ' '

可能会更快,然后通过管道捕获文件。 wc -c不计算字节数,它从inode中检索大小...或者我的硬盘读取速度为717 GB / s: - )

$ time wc -c very-big.pcap
5394513291 very-big.pcap
real    0m0.007s
user    0m0.000s
sys     0m0.000s

答案 2 :(得分:0)

cat * .dmg | wc -c

cat将所有文件复制到stdout,wc计算转储的大小。什么都没有写入磁盘。

效率不高,但即使我能理解它:)

答案 3 :(得分:0)

增强Ayman的非分叉命令:

find . -iname '*.dmg' -ls 3&> /dev/null | 
      awk 'BEGIN { s = 0 } {s += $7 } END { print "%dGB", s / 2^30 }'

感谢Ayman纠正我的初步答复。