【问题标题】:How to output top 3 largest folders including top 3 subdirectories?如何输出前 3 个最大的文件夹,包括前 3 个子目录?
【发布时间】:2023-01-12 10:14:02
【问题描述】:

我正在努力帮助我兄弟完成他的任务,但我不知道该怎么做,你能帮忙吗?

假设我在一个测试目录中,我想输出前 3 个最大的文件夹,包括它们的前 3 个子目录。我怎样才能在脚本上做到这一点?谢谢你。

我不知道该怎么做..

【问题讨论】:

  • 定义“最大”。名字中最多的字符?磁盘上的大多数块?大多数文件在里面?
  • 您是否在每个顶级最大目录中寻找 3 个最大的子目录?
  • 请添加到您的问题(无评论):您搜索了什么,找到了什么?你尝试了什么,它是如何失败的?
  • 对此我很抱歉,我对编码一无所知,但基本上他想做一个脚本,可以根据磁盘大小输出 3 个最大的文件夹和 3 个子目录。

标签: bash shell unix directory scripting


【解决方案1】:

在这种情况下,您需要使用完整路径引用。

此外,根据目录和内容,您需要注意如何捕获第一级的正确完整路径(因为名称中可能存在空格)。

我用了 ”/var" 作为本例中目录搜索的顶级。

#!/bin/bash

top3()
{
    awk '{
        pos=index( $0, "/" ) ;
        if( pos >0 ){
            print substr($0, pos) ;
        } ;
    }'
}

TMP=`basename "$0" ".sh" `

du -sh /var/* 2>>/dev/null | sort -hr >${TMP}.dirs
cat ${TMP}.dirs

head -3 ${TMP}.dirs | top3 >${TMP}.dirs3

rm -f ${TMP}.subdirs3
for dir in $( cat ${TMP}.dirs3 )
do
    echo -e "Doing '${dir}' ..."
    grep "${dir}"'$' ${TMP}.dirs >>${TMP}.subdirs3

    du -sh ${dir}/* 2>>/dev/null | sort -hr >${TMP}.subdirs
    head -3 ${TMP}.subdirs | awk '{ printf("	%s
", $0) }' >>${TMP}.subdirs3

    echo "" >>${TMP}.subdirs3
done
echo ""
cat ${TMP}.subdirs3

会话输出如下所示:

Doing '/var/lib' ...
Doing '/var/log' ...
Doing '/var/cache' ...

3.9G    /var/lib
    2.0G    /var/lib/snapd
    997M    /var/lib/apt
    627M    /var/lib/clamav

2.9G    /var/log
    2.7G    /var/log/journal
    87M     /var/log/installer
    48M     /var/log/atop

237M    /var/cache
    209M    /var/cache/apt
    6.1M    /var/cache/debconf
    6.1M    /var/cache/cracklib

【讨论】:

    猜你喜欢
    • 2023-02-20
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2010-10-07
    相关资源
    最近更新 更多