如何解决计算目录树中一组子目录的磁盘总使用量?
这是场景。
假设我们有这种样式的目录结构-
/snapshots/201801/users/tom/
/snapshots/201802/users/harry/
/snapshots/201803/users/chris/
以此类推。
我想在输出中得到的是名称目录的磁盘总使用量,但将所有“ 20180x”文件夹都计入总数中。最后,应按磁盘使用率从高到低的顺序对输出进行排序。
作为我要做的一个非常基本的例子-
du -h --max-depth=1 /snapshots/2018*/users/ | sort -n
输出将显示输出中每个“ 201801”,“ 201802”,“ 201803”目录通过目录时的总磁盘使用量。
我真正想要的是输出来显示给定用户在“ 201801”,“ 201802”,“ 201803”之间的磁盘使用总量,然后按大小对其进行排序。
因此,例如,结果输出将需要在所有可用的“ 201801”,“ 201802”,“ 201803”上显示磁盘空间总计,例如-“ 20GB =” / tom“的总和-目录树中的文件夹。假设“ 201801”,“ 201802”,“ 201803”代表该用户文件夹的特定版本,我们要计算所有这些文件夹中每个用户的总数。我们可以假设“ 201801” “,“ 201802”,“ 201803”样式文件夹将始终在树中的相同深度处找到。
20GB /tom
10GB /harry
900MB /chris
希望这是有道理的。请让我知道您是否可以使用更好的标题来解决这个问题,因为我不确定用最好的术语来解释我要用的句子。
谢谢!
解决方法
使用GNU实用程序du
和sort
,您可以按照以下方式编写脚本:
#!/bin/bash
users=(tom harry chris)
for user in "${users[@]}"; do
usage=$(du -hc /snapshots/*/users/"$user")
usage=${usage##*$'\n'}
printf "%s\t%s\n" "${usage%%[[:blank:]]*}" "$user"
done | sort -h
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。