![du를 사용하여 현재 디렉터리에서 가장 큰 상위 20개 폴더/파일의 크기를 바이트 및 사람이 읽을 수 있는 형식으로 반복적으로 나열합니다.](https://rvso.com/image/154457/du%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%98%84%EC%9E%AC%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%97%90%EC%84%9C%20%EA%B0%80%EC%9E%A5%20%ED%81%B0%20%EC%83%81%EC%9C%84%2020%EA%B0%9C%20%ED%8F%B4%EB%8D%94%2F%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%81%AC%EA%B8%B0%EB%A5%BC%20%EB%B0%94%EC%9D%B4%ED%8A%B8%20%EB%B0%8F%20%EC%82%AC%EB%9E%8C%EC%9D%B4%20%EC%9D%BD%EC%9D%84%20%EC%88%98%20%EC%9E%88%EB%8A%94%20%ED%98%95%EC%8B%9D%EC%9C%BC%EB%A1%9C%20%EB%B0%98%EB%B3%B5%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EB%82%98%EC%97%B4%ED%95%A9%EB%8B%88%EB%8B%A4..png)
달성해야 할 몇 가지 사항 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