K, M, G 형식 대신 사람이 읽을 수 있는 형식을 KB, MB, GB로 인쇄하는 방법은 무엇입니까?

K, M, G 형식 대신 사람이 읽을 수 있는 형식을 KB, MB, GB로 인쇄하는 방법은 무엇입니까?

내 데스크탑에는 휴지통에 있는 파일의 현재 크기를 표시하는 위젯이 있습니다. 위젯의 코드는 다음과 같습니다.

du -ch ~/.Trash | grep total | cut -c 1-5

이렇게 하면 "99M"과 같은 결과가 나타납니다. 하지만 "99MB"(각각 KB, GB)를 표시하고 싶습니다. 이 결과를 얻으려면 코드를 올바른 문자열로 바꾸도록 도와주실 수 있나요? ("99"와 "MB" 사이의 공백도 참고하세요) 미리 감사드립니다!

추신: 저는 Mac OS X 10.11.6을 사용합니다.

답변1

전체 크기 값만 표시하려면 -s( ) 옵션을 사용하십시오 .--summarize

du -sh | sed 's/^\([0-9]*\)\([^B]\).*/\1 \2B/'
  • ([0-9]*\)- 전체 크기 값 캡처

  • ([^B]\)B- (바이트, 그대로 유지)를 제외한 캡처 단위 단축 값

답변2

tr을 사용하여 후행 공백을 제거하고 echo 명령에서 "B"로 묶을 수 있습니다.

echo "$(du -ch ~ | grep total | cut -c 1-5 | tr -d '[:blank:]')B" | sed 's/\(K\|M\|G\)B/ \1B/'

그렇지 않으면sed그것:)

du -ch ~ | grep total | cut -c 1-5 | sed 's/\s\+$/B/' | sed 's/\(K\|M\|G\)B/ \1B/'

편집 0: 장치 앞의 공간을 인식하지 못하고 작업을 수행하기 위해 sed를 추가하게 되었습니다.

답변3

  1. 크기가 10K에서 99K 사이(예: 42K)인 경우 처음 5개 문자 출력은 다음과 같습니다.

            4    2    K    (상표)    /

    (이는 경로 이름 인수가 /- 로 시작한다고 가정합니다. 이는 로 시작하는 인수를 지정하는 경우입니다 ~.) 이것은 : cut -c 1-5의 출력이 될 것입니다 42K     /. (내 생각에는 nnM둘 다 동일한 문제가 있을 것입니다.) 다음을 사용하여 첫 번째 것을 얻는 것이 nnG 더 합리적입니다.cut -f1대지처음 5자가 아닌 출력 문자입니다.

  2. 디렉토리 이름에 단어가 포함되어 있으면 어떻게 되나요 total? 팁: 각 하위 디렉터리에 대한 데이터를 생성한 다음 삭제하는 grep대신 전체를 생성하는 것이 더 합리적입니다. ~처럼dfgrepdf로만 페레크레스트는 지적했다., -s옵션을 지정하여 이를 수행할 수 있습니다.
  3. ~처럼dmgnx가 지적했습니다K, 숫자( 또는 로 끝나는)가 있으면 추가하기만 하면 됩니다 . 따라서 내 복합 솔루션은 다음과 같습니다 M.GB

    echo "$(du -sh ~/.Trash | cut -f1)B"
    
  4. 이런! 숫자와 단위 사이에 공백을 추가하고 싶다는 것을 몰랐습니다. 좋습니다. 따라서 다음이 필요합니다 sed(또는 이와 유사한 것).

    du -sh ~/.Trash | cut -f1 | sed 's/[KMG]$/ &B/'
    

    아니면 그냥

    du -sh ~/.Trash | sed 's/^\([0-9.]*\)\([KMG]\).*$/\1 \2B/'
    

    ( sed디렉토리 이름을 삭제하고 cut완전히 제거하는 경우)

답변4

강제적이고 임의로:

du -ch ~/.Trash | grep total | cut -c 1-5 | 
  sed -e 's/K$/ KB/; s/M$/ MB/; s/G$/ GB/'

관련 정보