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

Dar*_*zer 79 linux mac command-line macos

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

小智 89

du在 OS X中使用的 BSD 版本报告大小为 512 字节的块——这些大小基本上四舍五入到下一个 512 字节的值。这告诉您磁盘上的空间,它大于数据量。如果您有很多小文件,则差异可能很大。

这是一个例子。

这是常规的值du。它位于 512 字节的块中:

$ du -s
248   .
Run Code Online (Sandbox Code Playgroud)

-h标志产生一个更易读的数字,以千字节为单位。正如预期的那样,它是 512 字节块数的一半:

$ du -hs
124K  .
Run Code Online (Sandbox Code Playgroud)

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

$ find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
60527
Run Code Online (Sandbox Code Playgroud)

该值与 Finder 的“获取信息”窗口报告的数字完全匹配。(这组文件中没有奇怪的分叉或 xattrs。)它明显小于du.

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

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


Dar*_*zer 76

显示单个文件的大小

du -h path_to_a_file

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

du -h path_to_a_directory

显示目录内容的大小:

du -sh path_to_a_directory

  • `du -sch` 如果你想要更容易阅读的东西。 (25认同)

Aci*_*cid 11

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

find . -type f -print0 | xargs -0 stat -f%z | awk '{b+=$1} END {print b}'
Run Code Online (Sandbox Code Playgroud)

上面的终端代码(我在 osx 10.6 上)为我提供了最好的结果,并且比“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
Run Code Online (Sandbox Code Playgroud)


ken*_*orb 10

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

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

du -ah . | sort -rh | head -20
Run Code Online (Sandbox Code Playgroud)

注意:选项-hforsort在 OSX/BSD 上不可用,因此您必须sortcoreutils(例如 via brew)安装并将 bin 路径应用到PATH,例如

export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" # Add a "gnubin" for coreutils.
Run Code Online (Sandbox Code Playgroud)

否则使用:

du -a . | sort -rn | head -20
Run Code Online (Sandbox Code Playgroud)

  • @nucleartux 检查命令下方的注释。这适用于 GNU sort,您可以通过以下方式在 macOS 上安装:`brew install coreutils`,否则在末尾使用 BSD sort 命令而不使用 `-h`。 (3认同)