免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3588 | 回复: 8
打印 上一主题 下一主题

怎么统计一个文件列表里的文件的总大小? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-29 18:14 |只看该作者 |倒序浏览
  1. cat filelist
  2. /usr/src/linux/xxxx
  3. /tmp/aaaa
  4. /usr/local/etc/ffff
  5. /var/log/oooo

  6. cat filelist |while read line ; do cat $line;done |wc -c
复制代码

但这样的效率很低很低,文件一大就不能这样了
比如现在我所要统计的是个100M以上的文件列表


  1. #!/bin/bash
  2. COUNTER=0;
  3. cat filelist |while read line ;do
  4. SIZE=$(ls -l $line 2>/dev/null|awk '{print $5}')
  5.    if [ $? !-eq 0 ] ;then
  6.      COUNTER=$(expr "$COUNTER" + "$SIZE")
  7.         echo
  8.    fi
  9. done
  10. echo $COUNTER
复制代码

上面的经过测试,好想不行,说是expr无法计算,不知道我有没有写错
大家有什么其他方法吗?希望不吝共享之,谢谢

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-10-29 18:18 |只看该作者

怎么统计一个文件列表里的文件的总大小?

ls -l|awk '{size+=$5}END{print size}'
or
cat /path/*|wc -c

论坛徽章:
0
3 [报告]
发表于 2004-10-29 18:38 |只看该作者

怎么统计一个文件列表里的文件的总大小?

原帖由 "寂寞烈火" 发表:
ls -l|awk '{size+=$5}END{print size}'
or
cat /path/*|wc -c


强啊!!!

论坛徽章:
0
4 [报告]
发表于 2004-10-30 11:04 |只看该作者

怎么统计一个文件列表里的文件的总大小?

原帖由 "寂寞烈火" 发表:
ls -l|awk '{size+=$5}END{print size}'
or
cat /path/*|wc -c


你这个只针对文件都在同个目录下的啦,如果不同路径就不行了

我上面的例子有写是不同文件路径的呀,我只是想问不同路径的话,是否一定要用循环,我的那个文件列表有100多M啦,也就是说那个文件列表大概有100W行,而文件列表里的文件可能是10G,或者更多,用cat显然会造成死进程
  1. cat filelist|while read line ; do ls -l $line 2>/dev/null|awk '{print $5}';done|awk '{size+=$1}END{print size}'  
复制代码
这个也很慢哎,晕了

论坛徽章:
0
5 [报告]
发表于 2004-10-30 11:30 |只看该作者

怎么统计一个文件列表里的文件的总大小?

一分钟处理2300行(dell 1750、RHEL-AS2(U2))一小时处理138000行

如果我的文件列表有100W行,就需要7个小时,我晕昏

论坛徽章:
0
6 [报告]
发表于 2004-10-30 12:47 |只看该作者

怎么统计一个文件列表里的文件的总大小?

真不明白,你干吗要扫描文件的内容呢?
如果是不同的目录大不了,进入到不同的目录中多统计几次,将这几次的统计结果汇总就可以了.

论坛徽章:
0
7 [报告]
发表于 2004-10-30 13:16 |只看该作者

怎么统计一个文件列表里的文件的总大小?

如果文件没有规律, 必须要按 filelist 统计的话,可以这样,会快很多。
下面是个 100 万行的例子:


# wc -l filelist
1050007

# time cat filelist | xargs du -sck |grep total | awk '{i+=$1} End { print "Total size: "i" KB"}'
Total size: 1.84197e+10 KB

real        6m53.643s
user       2m41.444s
sys         4m2.729s

论坛徽章:
0
8 [报告]
发表于 2012-06-19 10:48 |只看该作者
cat filelist|awk '{print "ls -ltr " $1}'|sh|awk '{size+=$5}END{print size}'

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
9 [报告]
发表于 2012-06-19 12:53 |只看该作者
回复 1# killua

SIZE=$(cat filelist | xargs ls -l 2>/dev/null |awk '{sum+=$5}END{print sum}')
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP