Chinaunix
标题:
怎么统计一个文件列表里的文件的总大小?
[打印本页]
作者:
killua
时间:
2004-10-29 18:14
标题:
怎么统计一个文件列表里的文件的总大小?
cat filelist
/usr/src/linux/xxxx
/tmp/aaaa
/usr/local/etc/ffff
/var/log/oooo
cat filelist |while read line ; do cat $line;done |wc -c
复制代码
但这样的效率很低很低,文件一大就不能这样了
比如现在我所要统计的是个100M以上的文件列表
#!/bin/bash
COUNTER=0;
cat filelist |while read line ;do
SIZE=$(ls -l $line 2>/dev/null|awk '{print $5}')
if [ $? !-eq 0 ] ;then
COUNTER=$(expr "$COUNTER" + "$SIZE")
echo
fi
done
echo $COUNTER
复制代码
上面的经过测试,好想不行,说是expr无法计算,不知道我有没有写错
大家有什么其他方法吗?希望不吝共享之,谢谢
作者:
寂寞烈火
时间:
2004-10-29 18:18
标题:
怎么统计一个文件列表里的文件的总大小?
ls -l|awk '{size+=$5}END{print size}'
or
cat /path/*|wc -c
作者:
xchen301
时间:
2004-10-29 18:38
标题:
怎么统计一个文件列表里的文件的总大小?
原帖由 "寂寞烈火" 发表:
ls -l|awk '{size+=$5}END{print size}'
or
cat /path/*|wc -c
强啊!!!
作者:
killua
时间:
2004-10-30 11:04
标题:
怎么统计一个文件列表里的文件的总大小?
原帖由 "寂寞烈火" 发表:
ls -l|awk '{size+=$5}END{print size}'
or
cat /path/*|wc -c
你这个只针对文件都在同个目录下的啦,如果不同路径就不行了
我上面的例子有写是不同文件路径的呀,我只是想问不同路径的话,是否一定要用循环,我的那个文件列表有
100多M
啦,也就是说那个文件列表大概有
100W行
,而文件列表里的文件可能是
10G
,或者更多,用cat显然会造成死进程
cat filelist|while read line ; do ls -l $line 2>/dev/null|awk '{print $5}';done|awk '{size+=$1}END{print size}'
复制代码
这个也很慢哎,晕了
作者:
killua
时间:
2004-10-30 11:30
标题:
怎么统计一个文件列表里的文件的总大小?
一分钟处理2300行(dell 1750、RHEL-AS2(U2))一小时处理138000行
如果我的文件列表有100W行,就需要7个小时,我晕昏
作者:
随风漂
时间:
2004-10-30 12:47
标题:
怎么统计一个文件列表里的文件的总大小?
真不明白,你干吗要扫描文件的内容呢?
如果是不同的目录大不了,进入到不同的目录中多统计几次,将这几次的统计结果汇总就可以了.
作者:
lightspeed
时间:
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
作者:
xinqingchaguan
时间:
2012-06-19 10:48
cat filelist|awk '{print "ls -ltr " $1}'|sh|awk '{size+=$5}END{print size}'
作者:
jason680
时间:
2012-06-19 12:53
回复
1#
killua
SIZE=$(cat filelist | xargs ls -l 2>/dev/null |awk '{sum+=$5}END{print sum}')
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2