2

该命令尝试总结大小:

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

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

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

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

4 回答 4

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 }'
于 2009-05-23T19:17:58.977 回答
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
于 2009-05-23T19:30:55.783 回答
0

猫 *.dmg | 厕所-c

cat 将所有文件复制到标准输出,wc 计算转储文件的大小。没有任何东西被写入磁盘。

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

于 2009-05-23T19:26:28.787 回答
0

增强的 Ayman 的非分叉命令:

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

感谢 Ayman 纠正了我最初的回复。

于 2009-05-23T19:54:59.027 回答