仅使用 du 获取文件大小

仅使用 du 获取文件大小

如何使用 du 命令获取所有文件及其子目录中所有文件的大小。

我正在尝试以下命令来获取所有文件(以及子目录中的文件)的大小

find . -type f | du -a

但这也会打印出文件夹大小。如何获取所有文件和子目录中文件的大小列表?我也尝试过exec flag,但我不确定在执行findinto的结果后如何将输出传输到另一个命令中du

操作系统是带有ksh shell的AIX 6.1。

答案1

我通常使用该-exec实用程序。像这样:

find . -type f -exec du -a {} +

我用 GNU find 在 bash 和 ksh 上尝试过。我从未尝试过 AIX,但我确信您的 find 版本有一些-exec语法。

以下代码片段对列表进行排序,最大的在前:

find . -type f -exec du -a {} + | sort -n -r | less

答案2

如果您有 GNU 实用程序,请尝试

find . -type f -print0 | du --files0-from=-

答案3

我一般使用:

find . -type f -print0 | xargs -r0 du -a

Xargs 通常会调用该命令,即使没有传递任何参数;xargs du </dev/null还是会叫,xargs -r du </dev/null不会叫du。该-0参数查找以 null 结尾的字符串,而不是以换行符结尾的字符串。

然后我通常| awk '{sum+=$1} END {print sum}'在最后加上总和。

答案4

为了完整性:接受的答案执行了问题所要求的具体用途du,但请注意,它将du打印出磁盘使用情况(这取决于存储文件的分区的块大小),这通常不是与文件大小相同(无论文件存储在何处,该大小都是恒定的)。另一种方法是打印文件中的字节数而不是磁盘使用情况 find . -type f -printf '%s %f\n'(或find . -type f -printf '%s %f\n' | sort -k2按名称排序)。

相关内容