【问题标题】:Output 3 Biggest Directories and 3 Biggest subdirectories输出 3 个最大的目录和 3 个最大的子目录
【发布时间】:2023-02-20 19:36:59
【问题描述】:

我是 unix 的新手,我想学习 unix。 有人把这个剧本给了我。

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

基本上我想输出 3 个最大的目录及其 3 个最大的子目录,我很难理解脚本。有人可以帮助简化这个吗?提前致谢

我尝试将路径从 var 更改为 log,它说

error

我希望有一个简单的脚本。

【问题讨论】:

    标签: bash shell unix


    【解决方案1】:

    这是一个更简单且希望更具可读性的解决方案:

    #!/bin/bash
        
    {
        du -sh /var/log/*/ |
            sort -rh |
            tee /dev/stderr |
            while read du path; do
                printf -- '
    %s
    ' "Processing $du $path"
                du -sh "$path"* | sort -rh | head -3
                ((++c==3)) && break
            done
    } 2>&1
    

    示例输出

    1,4G    /var/log/journal/
    1,2M    /var/log/installer/
    456K    /var/log/apt/
    144K    /var/log/lightdm/
    60K     /var/log/cups/
    4,0K    /var/log/ntpstats/
    
    Processing 1,4G /var/log/journal/
    1,4G    /var/log/journal/2a7428458da7474c81169e4d51424f0c
    
    Processing 1,2M /var/log/installer/
    496K    /var/log/installer/initial-status.gz
    384K    /var/log/installer/syslog
    300K    /var/log/installer/partman
    
    Processing 456K /var/log/apt/
    148K    /var/log/apt/term.log
    104K    /var/log/apt/eipp.log.xz
    92K /var/log/apt/term.log.3.gz
    

    演出

    # time bash old.sh
    real    0m3,063s
    user    0m0,548s
    sys     0m2,474s
    

    VS

    # time bash new.sh
    real    0m0,012s
    user    0m0,018s
    sys     0m0,005s
    

    【讨论】:

      猜你喜欢
      • 2023-01-12
      • 1970-01-01
      • 2011-01-26
      • 2012-06-09
      • 2011-03-13
      • 2010-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多