-2

Few things to be achieved 1. Recursively get top 20 largest folders/files 2. Get their sizes in bytes as well as human readable format

  • For du input arguments -s and -a don't go together. I want to use -a for finding all files, not just directories. – Rohan Ghige May 29 '19 at 06:04
  • Please edit your question to emphasise the differences, and what you specifically wanted to achieve. As it stands now, it's not very clear (which is presumably why someone downvoted it). And welcome to U/L! – Sparhawk May 29 '19 at 07:20

1 Answers1

-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