![du 命令与 find -mmin 结合使用](https://linux22.com/image/58135/du%20%E5%91%BD%E4%BB%A4%E4%B8%8E%20find%20-mmin%20%E7%BB%93%E5%90%88%E4%BD%BF%E7%94%A8.png)
我想了解数据库每天生成多少归档日志,所以我这样做了:
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 中,您将再次得到所有文件的大小。使-c
du 也显示出“总”线。如果只想要总数,可以添加| tail -1
到最后。
答案2
您的使用{} \;
将 的参数限制ls
为一个元素。如果您对归档日志的总数感兴趣,可以使用:
find /u02/archivelog -mmin -1440 -type f -exec wc -c {} + | tail -1
获取该目录下文件的总字节数。
在系统允许的情况下{} +
,在命令行上放置尽可能多的文件名(因此,如果您有很多文件和/或极长的文件名,则wc
有可能会被多次调用)。wc