仅使用du文件获取大小


49

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

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

find . -type f | du -a

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

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

Answers:


55

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

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

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

以下代码段对列表进行排序,从大到小:

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

3
如果您没有访问权限find -print0或其他GNU功能,我会回答这个问题。如果可以,更换\;\+将导致更少的调用du,从而更好的性能。
jw013 2011年

谢谢,这很有用,特别是因为du提供了不同单位的尺寸标记。
Shardul Upadhyay

我找不到有关该+选项的信息。那是一个选项du还是find?为什么会减少通话次数?
2013年

1
这是的标准选项find。它仅对exec命令(在我们的示例中du)指定一次,所有find给定的结果作为命令的连续参数给出。
rahmu

wtf,为什么没有这样的命令du -f --threshold=1G
Alexander Mills

16

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

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

该命令失败,表明print0不是有效命令,并且最后一个减号不是可识别的标志。我认为这种方法行不通,因为man du没有列出filesfrom标记。
Shardul Upadhyay

您应该将操作系统作为标记添加到问题中。我以为您有GNU,但忘了提了。
jw013 2011年

1
对我有支持!您可以使用特定的解决方案du -ch来获取大量匹配文件:find . -name 'blah blah.*' -print0 | du --files0-from=- -ch
Michael Goldshteyn

9

我通常使用:

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

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

然后,我通常| awk '{sum+=$1} END {print sum}'在末尾加上总数。


2
then I usually add是值得黄金:-)的
拉德克

2

这是带有长参数名和人工排序的版本。

find . -type f -exec du --human {} + | sort --human --reverse | head

我还认为不需要-a/--all传递给du


-2

当前目录中的特定文件

du -ch files*

较短,为我工作

du -sh .

用于当前目录和子目录中的所有文件

du(GNU coreutils)8.30


1
(1)你是什么意思du -ch files*?假设当前目录包含antapplebananabatcatcorndate,和dog,那里的动物名称的子目录和水果/蔬菜名称的文件-你会用什么命令得到公正的文件?还是那不是你的意思?(2)  du -sh .仅报告当前目录中及其下的所有内容,而不报告文件本身。这与问题所要求的完全相反。
G-Man说“恢复莫妮卡”
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.