如何使用 du 命令获取所有文件及其子目录中所有文件的大小。
我正在尝试以下命令来获取所有文件(以及子目录中的文件)的大小
find . -type f | du -a
但这也会打印出文件夹大小。如何获取所有文件和子目录中文件的大小列表?我也尝试过exec flag
,但我不确定在执行find
into的结果后如何将输出传输到另一个命令中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
按名称排序)。