du를 사용하여 현재 디렉터리에서 가장 큰 상위 20개 폴더/파일의 크기를 바이트 및 사람이 읽을 수 있는 형식으로 재귀적으로 나열합니다.

du를 사용하여 현재 디렉터리에서 가장 큰 상위 20개 폴더/파일의 크기를 바이트 및 사람이 읽을 수 있는 형식으로 재귀적으로 나열합니다.

구현해야 할 몇 가지 사항 1. 가장 큰 상위 20개 폴더/파일을 반복적으로 가져옵니다. 2. 크기를 바이트 단위로 사람이 읽을 수 있는 형식으로 가져옵니다.

답변1

#!/bin/bash
# ------------------------------------------
# Copy paste this content in a bash script e.g. ducks.sh
# And use it directly.
# ------------------------------------------
# Refer:
# https://www.cyberciti.biz/faq/linux-find-largest-file-in-directory-recursively-using-find-du/
# https://unix.stackexchange.com/a/220470/353485


function bytesToHR() {
        local SIZE=$1
        local UNITS="B KiB MiB GiB TiB PiB"
        for F in $UNITS; do
                local UNIT=$F
                test ${SIZE%.*} -lt 1024 && break;
                SIZE=$(echo "$SIZE / 1024" | bc -l)
        done

    if [ "$UNIT" == "B" ]; then
        printf "%4.0f    %s\n" $SIZE $UNIT
    else
        printf "%7.02f %s\n" $SIZE $UNIT
    fi
}

du --block-size=1 --all ./ | sort -rn | head -n 20 > ./dump.txt
ALL_SIZES="`awk '{print $1}' ./dump.txt`"

# echo $ALL_SIZES

rm -f ./new_dump.txt

for s in $ALL_SIZES; do
  bytesToHR $s >> ./new_dump.txt
done

paste ./new_dump.txt ./dump.txt

관련 정보