我使用什么命令来查找 Linux 或 Mac OS X 目录中所有文件的大小(递归)?
答案1
OS X 中使用的BSD 版本du
以 512 字节块报告大小——大小基本上四舍五入到下一个 512 字节值。这告诉您磁盘上的空间,它大于数据量。如果您有很多小文件,差异可能会很大。
这是一个例子。
这是常规的值du
。它以 512 字节的块为单位:
$ du -s
248 .
该-h
标志会生成一个更易读的数字(以千字节为单位)。正如预期的那样,它是 512 字节块数量的一半:
$ du -hs
124K .
最后,您可以使用find
和awk
来计算文件中实际字节数的总和。这有点慢,但确实有效:
$ 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 上不可用,因此您必须sort
从coreutils
(例如通过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 } }}'