查找占用大量磁盘空间的子文件夹

问题描述 投票:0回答:1

我很想编写一个 bash 脚本来帮助我找到减少磁盘使用的机会。

该脚本将接受 2 个参数:一个父文件夹(对我来说通常是

/apps/
)和一个阈值(例如“200M”)。

我当前的方法并不理想(不使用阈值并显示大量冗余输出)。

目前我运行

cd /apps/ && du -aBM 2>/dev/null | sort -nr | head -n 15
并看到如下输出:

8975M   .
1448M   ./delta
1387M   ./alpha
1350M   ./alpha/releases
1144M   ./bravo/releases
1144M   ./bravo
1137M   ./charlie
1117M   ./delta/releases
902M    ./alpha/releases/202210091311
871M    ./charlie/releases
796M    ./echo
794M    ./echo/releases
791M    ./alpha/releases/202210091311/node_modules
703M    ./scoreboard
684M    ./scoreboard/node_modules

我希望输出省略如下行:

8975M   .
1448M   ./delta
1387M   ./alpha
1350M   ./alpha/releases
1144M   ./bravo
1137M   ./charlie
902M    ./alpha/releases/202210091311
796M    ./echo
703M    ./scoreboard

因为这些浪费了我的注意力,因为上面的输出还包括那些高于我关心的阈值(200M)的文件夹的子文件夹。

这些是更有趣的台词:

1144M   ./bravo/releases
1117M   ./delta/releases
871M    ./charlie/releases
794M    ./echo/releases
791M    ./alpha/releases/202210091311/node_modules
684M    ./scoreboard/node_modules

不过,我认为

du -aBM 2>/dev/null | sort -nr
方法不是实现我的实际目标的正确起点。

因为实际上,也许任何那些文件夹(在我最近的示例中)甚至没有达到应有的嵌套/深度(也满足 200 MB 阈值的最低级别子文件夹)。

例如,也许

/echo/subfolder1
/echo/subfolder2
各为 300M。

我的云服务器磁盘空间有限,不想支付更多费用。

bash storage disk diskspace
1个回答
0
投票

我还没有认真思考过这个问题,所以逻辑可能不正确。

假设

du
的输出始终是深度优先。

如果已经看到某个关卡,我们不需要打印任何内容。否则,打印并标记级别和所有父级。

du -aBM /top 2>/dev/null |
awk -FM '$1>200' |
awk -F/ -v OFS=/ '
    {
        orig = $0
        sub(/^[0-9]+M[ \t]+/,"")
        for (shown=0; NF>0; --NF)
            if ( !($0 in seen) ) {
                if (!shown++) print orig
                seen[$0]
            }
    }
'
© www.soinside.com 2019 - 2024. All rights reserved.