【问题标题】:Calculating the total disk usage for a set of subdirectories across a directory tree?计算目录树中一组子目录的总磁盘使用量?
【发布时间】:2020-09-08 09:07:42
【问题描述】:

这是场景。

想象一下我们有这种风格的目录结构 -

/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”之间的磁盘使用总量,然后按大小对其进行排序。

因此,例如,生成的输出需要显示磁盘空间总数,其计算方式如下 - “20GB = “/tom”的总和 - 涵盖所有可用的“201801”、“201802”、“201803”目录树中的文件夹。想象“201801”、“201802”、“201803”代表用​​户文件夹的特定版本,我们想要计算所有这些用户的总数。我们可以假设“201801 ","201802","201803" 样式文件夹将始终位于树中的相同深度。

20GB /tom
10GB /harry
900MB /chris

希望这是有道理的。如果您有更好的标题,请告诉我,因为我不确定用一句话来解释我想要做什么的最佳术语。

谢谢!

【问题讨论】:

  • 我会首先像您现在所做的那样计算总计,将所有内容写入文件,然后编写一个程序来处理文件并总结这些值。在这种情况下,不使用 -h 可能会保护自己的一些工作。

标签: linux bash directory du disk-access


【解决方案1】:

使用 GNU 实用程序 dusort,您可以按照以下方式编写脚本:

#!/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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2019-06-05
    • 2021-08-25
    • 2015-06-27
    • 2018-08-10
    • 2015-06-28
    相关资源
    最近更新 更多