![获取非常大的文件夹大小的快速方法](https://linux22.com/image/157687/%E8%8E%B7%E5%8F%96%E9%9D%9E%E5%B8%B8%E5%A4%A7%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%B9%E5%A4%A7%E5%B0%8F%E7%9A%84%E5%BF%AB%E9%80%9F%E6%96%B9%E6%B3%95.png)
我通常需要处理大小约为 1 TB 的文件夹(其中包含子文件夹),并且由于存储限制,我需要经常删除文件夹以保持在分配的容量范围内。
我通常有 30-40 个文件夹,每个文件夹最多包含 13 个子文件夹。
有没有快速获取文件夹大小的方法?
我已经du -s .
从父文件夹尝试过,但是..速度不是很快。
感谢帮助!
答案1
由于目录大小通常在一天内稳定,并且在一天中的某个时刻快速获取大小信息非常重要,因此最适合您的方法是自动化的工作是提前收集信息。如果您的用户具有所需的读取权限,则只需将这一行放入您自己的 crontab ( crontab -e
) 中以在每晚凌晨 2:30 运行即可:
30 2 * * * ( date ; du --summarize path1 path2 ; date ) >> $HOME/du_out.txt
当您对结果更加有信心时,您可以将其扩展为脚本,也许在系统范围的 cron 容量中运行,以便其他管理员可以维护它,并将有关创建或访问日期的信息添加到自动删除如果可用空间太低,则使用最旧和最大的文件(大概您已经有一种机制,因此应保留更长时间的重要目录将“提升”到另一个位置)。
当然,如果您已经拥有一个全面的构建系统,例如 jenkins,请忘记我所说的有关 cron 的所有内容,并将其创建为那里的工作。
答案2
我们可以尝试使用下面的命令,它将显示哪个父文件夹占用了大部分空间
for i in parentfolder1 parentfolder2 parentfolder3
do
find $i -printf "%s %p\n"|awk 'BEGIN{sum=0}{sum=sum+$1}END{print sum}';echo $i; done| sed "N;s/\n/ /g"| sort -k1 -nr| sed -n '1p'