unix 如何输出前3个最大的文件夹,包括前3个子目录?[已关闭]

ax6ht2ek  于 2023-01-13  发布在  Unix
关注(0)|答案(1)|浏览(214)
    • 已关闭**。此问题需要超过focused。当前不接受答案。
    • 想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

14小时前关门了。
Improve this question
我想帮我弟弟完成任务但我不知道该怎么做,你能帮忙吗?
假设我在一个测试目录中,我想输出前3个最大的文件夹,包括它们的前3个子目录。我怎样在脚本中做到这一点呢?谢谢。
我不知道该怎么办。

0lvr5msh

0lvr5msh1#

在这种情况下,您需要使用完整路径引用。
此外,根据目录和内容,您需要注意如何为第一级捕获正确的完整路径(因为名称中可能存在空格)。
在本例中,我使用“/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("\t%s\n", $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

相关问题