du는 사람이 읽을 수 있는 크기를 어떻게 계산합니까?

du는 사람이 읽을 수 있는 크기를 어떻게 계산합니까?

실제 데이터를 활용한 구체적인 예는 다음과 같습니다. du다음과 같이 실행 하면 /path/to/some/dir다음을 얻습니다.

% du -s --bytes /path/to/some/dir
4218593783204   /path/to/some/dir

KB, MB, GB 등과 같은 "사람이 읽을 수 있는" 단위로 해당 크기를 가져오고 싶습니다.

1 KB = 2 ** 10 B
1 MB = 2 ** 20 B
1 GB = 2 ** 30 B
1 TB = 2 ** 40 B
1 PB = 2 ** 50 B
1 EB = 2 ** 60 B

이 예에서 사람이 읽을 수 있는 필수 단위는 1TB이므로 위의 규칙에 따라 원래 4218593783204바이트는 다음과 같이 변환됩니다.

% printf -- "%f TB\n" $(( 4218593783204.0 / 2 ** 40 ))
3.836789 TB

du그래서 비슷한 결과를 찾고 있습니다 3.8T. 여태까지는 그런대로 잘됐다.

문제는 호출 시 du3.8T 근처에 보고되는 사람이 읽을 수 있는 크기를 알아낼 수 없다는 것입니다. 대신 나는 이것을 얻습니다 :

% du -sh /path/to/some/dir
5.3T    /path/to/some/dir
% du -s --si /path/to/some/dir
5.8T    /path/to/some/dir
% du -s --block-size=$(( 2 ** 40 )) /path/to/some/dir
6   /path/to/some/dir

(위의 마지막 절박한 시도인 를 사용한 것은 --block-size작동하더라도 비참할 정도로 부적절하다는 점에 유의하십시오. 왜냐하면 내가 원하는 KB, MB, GB 등을 미리 알아야 하기 때문입니다.)

나는 이 결과를 보고 혼란스러워요. 매뉴얼의 내용은 du다음과 같습니다.

       -h, --human-readable
              print sizes in human readable format (e.g., 1K 234M 2G)

       --si   like -h, but use powers of 1000 not 1024

...이것은 무슨 일이 일어나고 있는지 이해하는 데 전혀 도움이 되지 않습니다.

묻다:du위의 마지막 세 명령이 어떻게 5.3T, 5.8T 및 6이라는 숫자를 생성하는지 설명해 줄 수 있나요 ?

관련 정보