파일 크기만 표시하도록 "du" 출력 형식을 지정하는 방법은 무엇입니까?

파일 크기만 표시하도록 "du" 출력 형식을 지정하는 방법은 무엇입니까?

MacOS에서 파일 크기를 얻는 방법은 다음과 같습니다.

$ du -h "Anthem - Rush (Cover by Jewel Box).webm"          
 69M    Anthem - Rush (Cover by Jewel Box).webm

내가 원하는 건69M출력에서.Anthem - Rush(보석 상자 표지).webm생략되어 있습니다. 어떻게 하나요?

답변1

du(명백한) 크기가 아닌 파일의 disk sage를 보고합니다.u

파일 크기는 // ls옵션 -l(및 기타 정보)이나 서로 다르고 호환되지 않는 구문을 사용하는 다양한 유틸리티 구현 -o또는 해당 .-g-nstatfind-printf '%s\n'

GNU 구현은 디스크 사용량 대신 크기를 반환 du할 수도 있지만 --apparent-size디렉터리에는 사용할 수 없습니다. 이러한 유형의 파일의 경우 du해당 파일 내에서 참조되는 모든 파일의 디스크 사용량/크기가 항상 추가되기 때문입니다.

따라서 GNU 시스템에서 심볼릭 링크 확인 후 KMGTPE 접미사가 있는 파일 크기를 얻으려면 다음을 수행합니다.

stat -Lc%s -- "$file" | numfmt --to=iec

답변2

첫 번째 필드만 유지하세요. 여러 가지 방법으로 이 작업을 수행할 수 있습니다.

  1. 자르다

    du -h "Anthem - Rush (Cover by Jewel Box).webm" | cut -f1
    
  2. du -h "Anthem - Rush (Cover by Jewel Box).webm" | awk '{print $1}'
    
  3. sed

    du -h "Anthem - Rush (Cover by Jewel Box).webm" | sed 's/[[:blank:]].*//'
    
  4. 진주

    du -h "Anthem - Rush (Cover by Jewel Box).webm" | perl -pe 's/\s.*//'
    du -h "Anthem - Rush (Cover by Jewel Box).webm" | perl -lane 'print $F[0]'
    
    

답변3

예제 awk명령을 사용하여 원하는 작업을 수행할 수 있습니다.

du -h <filename>|awk '{print $1}'

답변4

du 출력의 유용한 부분을 추출하는 terdon의 다양한 방법을 조금 확장하려면 내 스크립트 중 일부에서 프로그램 출력의 다른 부분을 사용해야 하지만 다른 필드를 추출하기 위해 프로그램을 여러 번 실행하고 싶지 않습니다. 그래서 프로그램을 한 번 실행하고 전체(필터링되지 않은 원시) 출력을 변수로 캡처한 다음 셸 변수 확장을 사용하여 해당 변수에서 필요한 모든 필드를 추출했습니다.

예를 들어 다음을 수행하여 전체 출력을 기억할 수 있습니다.

du_output_raw=$(du -h 'Anthem - Rush (Cover by Jewel Box).webm')

그런 다음 공백으로 구분된 파일 크기의 첫 번째 필드를 추출합니다.

f_size=${du_output_raw%% *)

파일의 인코딩은 파일 확장자에 있으며 마지막 점 뒤의 부분을 추출합니다.

f_encoding=${du_output_raw##*.}

이것은 좋은 예이자 나쁜 예입니다. 출력의 일부를 다른 문자(하나는 공백을 사용하고 다른 하나는 "."를 사용)로 구분하여 추출했기 때문에 괜찮습니다. 이것은 파일 확장자를 추출하기 위해 실제로 du 출력을 사용하지 않고 다른 변수에 이미 있는 파일 이름을 사용하기 때문에 좋지 않습니다. 그러나 이것은 일반적인 생각을 보여줍니다.

배열 변수의 출력을 기억하여 더 자동으로 필드로 분할할 수 있다는 점을 누군가가 지적할 것이라고 확신합니다.

du_output=( $(du -h 'Anthem - Rush (Cover by Jewel Box).webm' )

또는 (다른 쉘에서는 사용할 수 없는 bash 기능을 사용하려면):

read -a du_output < <(du -h 'Anthem - Rush (Cover by Jewel Box).webm')

그런 다음 유용한 정보가 포함된 배열 요소를 사용합니다.

f_size="${du_output[0]}"
f_encoding=${du_output[-1]##*.}

관련 정보