실제 데이터를 활용한 구체적인 예는 다음과 같습니다. 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
. 여태까지는 그런대로 잘됐다.
문제는 호출 시 du
3.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이라는 숫자를 생성하는지 설명해 줄 수 있나요 ?