获取目录的大概大小(递归包括所有文件和子目录)


10

有没有一种方法可以快速获取目录的准确大小(包括递归地包括其所有子目录)?我不希望子目录的大小,我只是想将它们递归地包含在报告的总大小中。

失败了,找到近似尺寸的方法吗?我在想一些类似的方法df可以对整个文件系统做出快速响应,但是这次是针对特定目录(及其子目录)。

du当给定目录包含数千个子目录时,使用的解决方案似乎需要花费很长时间。


使用du是我所知道的唯一方法。问题在于数据分散在整个层次结构中,因此需要使用工具对数据进行计数以获取计数。
slm

Answers:


15

我觉得这很有用。

du -sm Directory

或获取内部目录的细分

du -sm Directory/*

然后排序,如果它有很多子目录

du -sm Directory/* | sort -n 

我使用-m选项的原因是为了确保获得兆字节的输出。我发现这便于我进行直观比较(当我没有混合使用单位时,例如比较999 KB和1MB与999000MB和1000000MB),另外的好处是您可以将输出传递给排序对象。

将所有内容放到后台并重定向输出,无论使用哪种方法都将花费时间,这是遍历许多文件所需要的时间。

du -sm Directory/* | sort -nr > ~/cacheDu.log &

注意逆向排序,因此大的是开头。每n分钟将其添加到cron运行。

然后使用别名ducache,您就拥有了相当最新的目录用法。

export alias ducache='head -n 15 ~/cacheDu.log'

@X Tian看到我对glenn jackman的回答的评论
Marcus Junius Brutus

接受,这就是为什么我使用-m和sort的原因
X Tian

3
请记住shopt -s dotglob,否则du -sm Directory/*将不计算隐藏文件/目录。
德米特里·格里戈里耶夫

@XTian抱歉,但是我无法通过某些命令提供帮助。
行家ツ

我是从这里
行家ツ

5
du -sh "$dir"

将以“人类”格式的输出为您提供总大小的摘要。


由于您正在寻找的替代方案du,因此我尝试了find,但是完全相同:

$ find . -printf "%s\n" | { 
    sum=0
    while read size; do ((sum+=size)); done
    echo $sum
}
122865202884
$ du -sb .
122865202884    .

谢谢,我知道这一点,但是du花费了很长时间,因为它可以产生准确的结果。我希望能提供快速的n'脏近似答案的工具/命令。
Marcus Junius Brutus 2014年

有,df但是可以在整个文件系统上使用。
glenn jackman 2014年

1

您可能不喜欢我的答案,但是我认为最好的方法是使用cron定期在后台运行“ du -s”并将结果存储在文件中。然后,当您需要一个近似值时,请使用文件中的值。您可以决定运行du的频率。我看不到获得价值的更快方法。命令du在执行任务时非常有效。

您可以快速执行此操作的唯一其他方法是为目录创建文件系统,然后df会很快为您提供所需的答案。

如果知道文件系统中除目录以外的所有内容的速度更快,则可以对文件系统运行df,对目录以外的所有内容运行du并减去。


0

它不能完全满足您的需求(不是单行打印),但是比其他解决方案更容易:

du -a -h | sort -hr | head -2

此命令将为您提供目录和子目录的大小以及当前目录中最大文件或子目录的大小。

PS:如果head -2子目录占据了当前目录的所有位置,并且在当前目录之前侦听,则该目录为。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.