如何从命令行获取Linux或Mac OS X目录的大小?[重复]


74

这个问题已经在这里有了答案:

在Linux或Mac OS X目录中,我使用什么命令来(递归)查找所有文件的大小?


2
您可以使用-k选项使用1K字节的块大小
Zoker

我只想推荐这个名为Disk Inventory X的免费软件。在此下载derlien.com可以轻松地在Mac OS X 上使用
Nimitack

du我使用的不是而是ncdu可以在这里找到参考remysharp.com/2018/08/23/cli-improved
Alan Dong

Answers:


82

duOS X 中使用的BSD版本报告的大小为512字节块-大小实际上被四舍五入为下一个512字节的值。这会告诉您磁盘上的空间大于数据量。如果您有很多小文件,差异可能会很大。

这是一个例子。

这是常规值du。它以512字节块为单位:

$ du -s
248   .

-h标志会导致可读性更高的数字(以千字节为单位)。如预期的那样,它是512字节块数量的一半:

$ du -hs
124K  .

最后,您可以使用findawk为您提供文件中实际字节的总和。这有点慢,但是可以起作用:

$ find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
60527

此值与Finder的“获取信息”窗口报告的数字完全匹配。(这组文件中没有古怪的fork或xattrs。)它比所报告的值小得多du

它是这样工作的:它获取所有文件的列表,并将它们传递给ls -l; 然后awk用于计数字节。该-type f标记在那里,因此只有文件(而不是目录)发送到ls。如果没有该标志,它还会将目录名称发送到ls,每个文件将被列出两次:一次作为一个单独的文件,一次作为目录中的一项。

GNU版本du可以以实际字节而不是块的形式给出值。不幸的是,BSD版本du没有这么灵活。


很好的解释。有趣的是,当du从带有-b选项的GNU coreutils中使用时,我得到的结果与find管道的结果不同。对于36 GB的目录,我得到82 KB的差异。
Stefan Schmidt

有什么方法可以以更易于阅读的格式打印出来?
anon58192932 '17

75

显示单个文件的大小

du -h path_to_a_file

显示目录,每个子目录和每个文件的内容大小:

du -h path_to_a_directory

显示目录内容的大小:

du -sh path_to_a_directory


25
du -sch如果您想要更容易阅读的内容。
乔伊

@Johannes,我想您应该将此评论发布为答案,这样才能被接受?
Arjan

我发现-c选项是多余的(至少在Mac OS X上是这样),而du -sh抑制了小计。
达里尔·斯皮策

啊哈,我不知道有人会接受自己的答案。现在至少有人知道问题已经解决。
Arjan

我很乐意接受一个新的答案,它是对我的改进。
Daryl Spitzer

9

du-告诉磁盘使用的不是文件大小

find . -type f -print0 | xargs -0 stat -f%z | awk '{b+=$1} END {print b}'

上面的终端代码(在osx 10.6上运行im)为我提供了最佳结果,并且比“ find ... -exec”更快

快速基准

time find . -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}'
4744010970

real    0m0.086s
user    0m0.029s
sys 0m0.073s

time find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
4744010970

real    0m18.515s
user    0m2.929s
sys 0m9.339s

如果要在Ubuntu上执行相同操作:find . -type f -print0 | xargs -0 stat -c%s | awk '{b+=$1} END {print b}'
Rodrigo Polo 2015年

有没有办法以人类可读的格式获得此结果?
anon58192932 '17

5

您可以使用du -ah .来递归显示所有文件和目录的大小。

这可以结合sort,所以你会看到在当前文件夹中的前20名最大的目录:

du -ah . | sort -rh | head -20

注:选项-hsort不可用在OSX / BSD,所以你已经安装sortcoreutils(例如,通过brew),并应用的bin路径PATH,如

export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" # Add a "gnubin" for coreutils.

否则使用:

du -a . | sort -rn | head -20

第一个命令在我的macOS 10.12.1 #du -ah上不起作用。| 排序-rh | head -20 sort:无效的选项-h尝试`sort --help'以获取更多信息。
nucleartux

2
@nucleartux检查命令下面的注释。这适用于GNU排序,您可以通过以下brew install coreutils方式将其安装在macOS上:否则,请在不带末尾使用BSD排序命令-h
kenorb

2

我将您的所有处理方式组合在一起,并与人类可读的输出相结合,结果是:

#!/bin/sh
find $1 -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}' | awk '{ sum=$1 ; hum[1024**3]="Gb";hum[1024**2]="Mb";hum[1024]="Kb"; for (x=1024**3; x>=1024; x/=1024){ if (sum>=x) { printf "%.2f %s\n",sum/x,hum[x];break } }}'

链接到要点:https : //gist.github.com/mlegenhausen/9365461

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.