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

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

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

答案1

OS X 中使用的BSD 版本du以 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 的“获取信息”窗口报告的数字完全匹配。(这组文件中没有奇怪的分支或 xattrs。)它比 报告的值小得多du

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

GNU 版本的du可以给出实际字节数而非块数的值。遗憾的是 BSD 版本的du不那么灵活。

答案2

显示单个文件的大小

du -h path_to_a_file

显示目录、每个子目录以及每个单独文件的内容的大小:

du -h path_to_a_directory

显示目录内容的大小:

du -sh path_to_a_directory

答案3

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

这可以与结合使用sort,这样您将看到当前文件夹中最大的 20 个目录:

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

注意:-h的选项sort在 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

答案4

我结合了所有的方法并将其与人类可读的输出相结合,结果是:

#!/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

相关内容