du 命令与 find -mmin 结合使用

du 命令与 find -mmin 结合使用

我想了解数据库每天生成多少归档日志,所以我这样做了:

find /u02/archivelog -mmin -1440 | du -sh并获得了 220GB,这是该目录中所有文件的总大小,而且不只是不到 1 天的总大小。

如果我这样做,find /u02/archivelog -mmin -1440 -exec ls -ltrh {} \;这将起作用并仅列出不到 1 天的文件。但这个逻辑似乎并不适用于du.

如何改进语法以获得预期结果?

答案1

du 似乎不接受通过管道传输到其中的文件。我想你正在寻找的是

find /u02/archivelog -type f -mmin -1440 -exec du -ch {} +

使用+代替 使;find 构建{}为列表并执行一次,而不是为每个匹配执行一次。您还需要使用-type f,否则它将匹配目录本身,每次添加新文件时目录都会被修改。如果您将目录本身包含在 du 中,您将再次得到所有文件的大小。使-cdu 也显示出“总”线。如果只想要总数,可以添加| tail -1到最后。

答案2

您的使用{} \;将 的参数限制ls为一个元素。如果您对归档日志的总数感兴趣,可以使用:

find /u02/archivelog -mmin -1440 -type f -exec wc -c {} + | tail -1

获取该目录下文件的总字节数。

在系统允许的情况下{} +,在命令行上放置尽可能多的文件名(因此,如果您有很多文件和/或极长的文件名,则wc有可能会被多次调用)。wc

相关内容