如何快速获取目录所占的空间大小

sh/bash/dash/ksh/zsh等Shell脚本
iaagssphinx
帖子: 20
注册时间: 2010-12-19 16:04
送出感谢: 0
接收感谢: 0

如何快速获取目录所占的空间大小

#1

帖子 iaagssphinx » 2011-01-12 3:01

我想统计下某个目录(其中的所有文件)占硬盘空间的大小,
用du -sh能统计出来,但是如果该目录下文件太多的话这种方法就
很慢,而且硬盘不停的响.
有没快点的命令可以用,不需要很精确,只要大概知道某个目录占用的空间就行了.
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: 如何快速获取目录所占的空间大小

#2

帖子 eexpress » 2011-01-12 9:42

很多?还是du
或者 baobab
● 鸣学
iaagssphinx
帖子: 20
注册时间: 2010-12-19 16:04
送出感谢: 0
接收感谢: 0

Re: 如何快速获取目录所占的空间大小

#3

帖子 iaagssphinx » 2011-01-12 17:34

eexpress 写了:很多?还是du
或者 baobab
请问du用哪些参数能快速点呢.
俺用du -sh当文件多的时候就要计算半天.
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: 如何快速获取目录所占的空间大小

#4

帖子 eexpress » 2011-01-12 20:28

du 已被别名为“du -sch”

我这很快。机器也算快吧。不知道你机器的情况。
● 鸣学
iaagssphinx
帖子: 20
注册时间: 2010-12-19 16:04
送出感谢: 0
接收感谢: 0

Re: 如何快速获取目录所占的空间大小

#5

帖子 iaagssphinx » 2011-01-12 22:07

eexpress 写了:du 已被别名为“du -sch”

我这很快。机器也算快吧。不知道你机器的情况。
这个怎么会快啊,你到一个数据比较多的目录(比如/usr, /home)
试下看,会有半天硬盘都在响,我想du是一个文件一个文件计算的,
这样太要命了.
javaworm
帖子: 3
注册时间: 2011-01-12 21:42
送出感谢: 0
接收感谢: 0

Re: 如何快速获取目录所占的空间大小

#6

帖子 javaworm » 2011-01-12 23:01

除了du好像没有其他命令了。要快,就自己写个c程序统计(没办法得到大概空间吧?要么精确,要么错误........),但算法一定不要递归,否则一样很慢......

这样一样读写磁盘.... :em03

通过命令来考虑提高速度是不现实的......

du命令的各个选项含义如下:
-s:对每个Names参数只给出占用的数据块总数。
-a:递归地显示指定目录中各文件及子目录中各文件占用的数据块数。若既不指定-s,也不指定-a,则只显示Names中的每一个目录及其中的各子目录所占的磁盘块数。
-b:以字节为单位列出磁盘空间使用情况(系统默认以k字节为单位)。
-k:以1024字节为单位列出磁盘空间使用情况。
-c:最后再加上一个总计(系统默认设置)。
-l:计算所有的文件大小,对硬链接文件,则计算多次。
-x:跳过在不同文件系统上的目录不予统计。

ps: 哪天有空可以看看du的实现源码呀,楼主............
头像
astolia
论坛版主
帖子: 3295
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 552 次

Re: 如何快速获取目录所占的空间大小

#7

帖子 astolia » 2011-01-12 23:41

iaagssphinx 写了: 这个怎么会快啊,你到一个数据比较多的目录(比如/usr, /home)
试下看,会有半天硬盘都在响,我想du是一个文件一个文件计算的,
这样太要命了.
不一个一个文件计算你还能怎么办?在文件系统中又没存储每个目录中文件的总大小
要想快的话除非自己写一个程序在后台统计每个目录的大小并存起来,并随着每一次文件的写入进行修改,以后你就可以不必递归查询,直接读那个缓存就是了
确实有经常du的需要的话,还不如将那个目录单独分出来,以后直接df了
iaagssphinx
帖子: 20
注册时间: 2010-12-19 16:04
送出感谢: 0
接收感谢: 0

Re: 如何快速获取目录所占的空间大小

#8

帖子 iaagssphinx » 2011-01-13 14:26

看来也只有7楼的可行了
头像
degreying
帖子: 22
注册时间: 2010-12-09 2:49
送出感谢: 0
接收感谢: 0

Re: 如何快速获取目录所占的空间大小

#9

帖子 degreying » 2011-01-13 23:05

--max-depth=N print the total for a directory (or file, with --all)
only if it is N or fewer levels below the command
line argument; --max-depth=0 is the same as
--summarize

觉得这个应该可以把 --max-depth = 1
介个是个嘛呀!
zhi5631
帖子: 19
注册时间: 2010-08-08 15:41
送出感谢: 1 次
接收感谢: 0

Re: 如何快速获取目录所占的空间大小

#10

帖子 zhi5631 » 2011-01-15 13:00

我也碰到这个问题了,具体是:
有一个目录,在该目录下第一层还有大约好几百个目录,在每个目录下还都有好几百个目录,现在要统计该目录占用空间大小,用du 命令,还只是空目录就花了好几分钟,而且只是一个这样的目录,程序中这样的目录应该不会少,
如此,其速度真无语,请问有什么办法没,谢谢
tusooa
帖子: 6546
注册时间: 2008-10-31 22:12
系统: 践兔
送出感谢: 6 次
接收感谢: 10 次
联系:

Re: 如何快速获取目录所占的空间大小

#11

帖子 tusooa » 2011-02-07 14:16

代码: 全选

find dir -type f -exec ls -l '{}' ';' | awk 'BEGIN{ x=0 } { x = x + $5 } END{ print x }'
行不?

代码: 全选

] ls -ld //
头像
be00
帖子: 805
注册时间: 2008-07-28 19:51
来自: 长沙
送出感谢: 1 次
接收感谢: 2 次
联系:

Re: 如何快速获取目录所占的空间大小

#12

帖子 be00 » 2011-02-07 14:37

用图形化的界面操作,会不会好一点,具体执行的指令不知道(ps -ef没刷出来),我的130G的/home/很快就出来了。
我的乌斑兔儿:http://zhanggang.net/m/b/b1/ubuntu右键选择在新的窗体打开
右边有一只黄手 ----> 或者注册Dropbox中文版感谢我
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
送出感谢: 42 次
接收感谢: 9 次
联系:

Re: 如何快速获取目录所占的空间大小

#13

帖子 millenniumdark » 2011-02-16 19:32

degreying 写了:--max-depth=N print the total for a directory (or file, with --all)
only if it is N or fewer levels below the command
line argument; --max-depth=0 is the same as
--summarize

觉得这个应该可以把 --max-depth = 1
这个只是结果清爽一点,计算的功夫还是一样的。
sk1418
帖子: 229
注册时间: 2007-07-01 17:36
系统: (En):System
来自: (En):address
送出感谢: 2 次
接收感谢: 3 次
联系:

Re: 如何快速获取目录所占的空间大小

#14

帖子 sk1418 » 2011-02-18 18:13

有个想法,自己没测试。不知道可行不?

把这个目录作为NFS共享挂载在某处。然后通过df -h 来获得信息,应该快吧?
---
regards,

Kent
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
送出感谢: 42 次
接收感谢: 9 次
联系:

Re: 如何快速获取目录所占的空间大小

#15

帖子 millenniumdark » 2011-02-18 22:38

sk1418 写了:有个想法,自己没测试。不知道可行不?

把这个目录作为NFS共享挂载在某处。然后通过df -h 来获得信息,应该快吧?
df -h出来的还是该目录所在原文件系统的信息。
回复

回到 “Shell脚本”