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)
最后,您可以使用find和awk为您提供文件中实际字节的总和。这有点慢,但它有效:
$ 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
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 上不可用,因此您必须sort从coreutils(例如 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)