Answers:
通过将选项-c
(或--total
)提供给du(1)
,您可以指示它产生总计。如果您的du(1)
支持实现支持这些选项之一,则可以使用以下命令获得所需的效果:
$ find . -name 'flibble*' -ctime +90 -exec du -shc {} +
编辑:请注意,如果文件数超过系统允许的最大参数数,则find
可能仍会执行command
多次。的某些实现du(1)
还支持从文件中读取文件名,这不受上述限制的影响:
$ find -name 'flibble*' -ctime +90 -print0 > filenames
$ du -shc --files0-from=filenames
-exec command {} \;
和的语义之间的区别-exec command {} +
如下:
command {} \;
command
对的每个结果执行一次find
。结果的路径名将代替传递{}
。
$ touch 1 2 3
$ find 1 2 3 -maxdepth 0 -exec echo {} \;
1
2
3
command {} +
command
检索所有结果后,执行。结果的路径名将代替传递{}
。
$ touch 1 2 3
$ find 1 2 3 -maxdepth 0 -exec echo {} +
1 2 3
该-print0
选项导致find(1)
将找到的文件名打印到以空字符分隔的标准输出中,并且该--files0-from
选项导致du(1)
读取以空分隔的文件名。与换行符不同,空字符可能不会出现在文件名中,因此输出是明确的。
要了解更多有关的选项du(1)
和find(1)
,您应该咨询各自的联机帮助页:
$ man du
$ man find
du(1)
还支持从文件中读取文件名:find 1 2 3 -maxdepth 0 -print0 > filenames; du -shc --files0-from=filenames
。
尝试这个:
du -c `find . -name 'flibble*' -ctime +90` | tail -1
原始命令给du一个参数,然后执行它,直到它遍历所有参数为止。这样,您只需一次给它所有的参数,然后减少单独的大小,只剩下总数。您可以根据需要删除管道和尾部以显示每个文件的大小。
-exec du -c {} +
选项find
,该选项会将未更改的路径名传递给du
。