27

我正在尝试查找特定目录中超过 180 天的文件使用的总磁盘空间。这就是我正在使用的:

    find . -mtime +180 -exec du -sh {} \;

但是上面的内容显然很安静,给了我找到的每个文件使用的磁盘空间。我只想要文件使用的总添加磁盘空间。这可以使用findexec命令来完成吗?

请注意,我根本不想为此使用脚本,如果可以为此提供一个衬里,那就太好了。非常感谢任何帮助。

4

5 回答 5

18

为什么不是这个?

find /path/to/search/in -type f -mtime +180 -print0 | du -hc --files0-from - | tail -n 1
于 2015-06-12T20:39:54.450 回答
16

du如果您将文件列表传递给它,则不会总结。

取而代之的是,将输出传递给cut并进行awk总结。所以你可以说:

find . -mtime +180 -exec du -ks {} \; | cut -f1 | awk '{total=total+$1}END{print total/1024}'

请注意,-h以人类可读格式显示结果的选项已被替换-k为相当于 1K 的块大小。结果以 MB 表示(见total/1024上文)。

于 2013-07-02T07:19:17.427 回答
14

@PeterT 是对的。几乎所有这些答案都会为每个文件调用一个命令 (du),这非常耗费资源,而且速度很慢且不必要。最简单最快的方法是这样的:

find . -type f -mtime +356 -printf '%s\n' | awk '{total=total+$1}END{print total/1024}'
于 2017-12-18T02:52:51.467 回答
7

注意不要考虑目录的磁盘使用情况。例如,我的~/tmp目录中有很多文件:

$ du -sh ~/tmp
3,7G    /home/rpet/tmp

运行devnull发布的示例的第一部分以查找过去 24 小时内修改的文件,我们可以看到awk将汇总目录的整个磁盘使用情况~/tmp

$ find ~/tmp -mtime 0 -exec du -ks {} \; | cut -f1
3849848
84
80

但是那段时间只修改了一个文件,磁盘使用量很少:

$ find ~/tmp -mtime 0
/home/rpet/tmp
/home/rpet/tmp/kk
/home/rpet/tmp/kk/test.png

$ du -sh ~/tmp/kk
84K /home/rpet/tmp/kk

所以我们只需要考虑文件并排除目录:

$ find ~/tmp -type f -mtime 0 -exec du -ks {} \; | cut -f1 | awk '{total=total+$1}END{print total/1024}'
0.078125

您还可以使用-newermt参数指定日期范围。例如:

$ find . -type f -newermt "2014-01-01" ! -newermt "2014-06-01"

http://www.commandlinefu.com/commands/view/8721/find-files-in-a-date-range

于 2014-09-23T08:55:20.350 回答
4

find您可以使用该选项打印文件大小-printf,但您仍然需要awk求和。

例如,所有超过 365 天的文件的总大小:

find . -type f -mtime +356 -printf '%s\n' \
     | awk '{a+=$1;} END {printf "%.1f GB\n", a/2**30;}'
于 2016-06-24T02:06:02.257 回答