du -h가 예상대로 작동하지 않는 이유는 무엇입니까?

du -h가 예상대로 작동하지 않는 이유는 무엇입니까?

사람이 읽을 수 있는 플래그를 사용하여 du 명령의 출력을 정렬하고 확장자(예: G, M, K...)를 무시하고 숫자로만 결과를 정렬하는 동시에 -h를 제거할 때 예상대로 결과에 플래그를 지정하려고 합니다.

:~/du_exmp$ du -h ./* | sort -n
1.0M    ./file2.txt
2.0G    ./file3.txt
 52K    ./file1.txt
:~/du_exmp$ du  ./* | sort -n
104 ./file1.txt
2048    ./file2.txt
4204192 ./file3.txt

문제의 근원은 무엇입니까? 어떻게 해결하나요?

답변1

노력하다 sort -h. 매뉴얼에서-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G)

sort --help명령 옵션을 더 잘 이해하는 데 사용합니다 .

답변2

문제는 당신이 보는 것이 어떻게 sort -n작동하는지입니다. 행의 초기 선행 값(또는 더 일반적으로 -k필드를 사용하는 경우)을 보고 정렬합니다. 접미사를 전혀 이해하지 못하므로 KMG접미사를 만나면 숫자 검색을 중단합니다.

가장 쉬운 방법은 두 번째 예에서 수행한 작업입니다. 플래그 du없이 사용하면 완전히 자연스럽게 작동합니다.-hsort

사람이 더 읽기 쉬운 출력을 유지하려면 du -h다른 중간 파이프라인 단계를 사용하여 디코딩된 숫자를 의 출력에 추가한 du다음 정렬하고 선택적으로 정렬 키를 제거하여 출력이 다음과 같이 보이도록 해야 합니다. 딱 맞아요 에서 그랬어요 du.

또 다른 옵션은 plain 을 사용하고 du두 번째 예와 같이 출력을 정렬한 다음 출력을 다른 단계로 파이프하여 순수 정수를 인코딩하는 것입니다 du -h.

awk전통적으로는 마지막 두 가지 아이디어를 사용 하지만 perl또는 python역시 작동합니다.

관련 정보