使用find计算超过180天的文件的总使用磁盘空间

问题描述 投票:17回答:5

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

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

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

请注意,我根本不想使用脚本,如果可以有一个内衬,这将是很好的。任何帮助都非常感谢。

linux unix command-line
5个回答
4
投票

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

find . -type f -mtime +356 -printf '%s\n' | awk '{total=total+$1}END{print total/1024}'

16
投票

如果你传递一个文件列表,du将不会总结。

相反,将输出传输到cut并让awk总结。所以你可以说:

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

请注意,以人类可读格式显示结果的选项-h已被-k取代,total/1024相当于块大小为1K。结果以MB表示(参见上面的find /path/to/search/in -mtime +180 -print0 | du -hc --files0-from - | tail -n 1 )。


13
投票

为什么不呢?

~/tmp

7
投票

之前的答案很好,但它有一个问题:它会多次使用相同的磁盘使用量,因为它会考虑目录磁盘的使用情况。

例如,我的$ du -sh ~/tmp 3,7G /home/rpet/tmp 目录中有很多文件:

devnull

运行awk发布的示例的第一部分来查找过去24小时内修改的文件,我们可以看到~/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

find


1
投票

您可以使用-printf选项使用awk打印文件大小,但仍需要find . -type f -mtime +356 -printf '%s\n' \ | awk '{a+=$1;} END {printf "%.1f GB\n", a/2**30;}' 来进行求和。

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

qazxswpoi
© www.soinside.com 2019 - 2024. All rights reserved.