바이트 단위가 아닌 읽을 수 있는 크기로 BASH에서 파일 크기를 얻는 방법

바이트 단위가 아닌 읽을 수 있는 크기로 BASH에서 파일 크기를 얻는 방법

내 쉘 파일에 있는 내용은 다음과 같습니다.

FILENAME=/var/lib/backups/html-backup/backup-15-04-2016.tar.gz;
FILESIZE= $(ls -lah $FILENAME | awk '{ $FILESIZEINGB = $5}')
echo "Size is $FILESIZEINGB ."

읽을 수 있는 형식으로 파일 크기를 볼 수 없는 이유를 알려주실 수 있습니까?

$FILESIZEINGB가 설정되지 않아 출력에서 ​​결과를 볼 수 없는 것 같습니다 echo.

답변1

하위 프로세스에서는 쉘 변수를 설정할 수 없습니다. 따라서 설정은 FILESIZEINGB어쨌든 작동하지 않습니다(그리고 구문에서 다른 것을 의미하기 때문에 작동하지 않습니다 awk).

그냥 사용하십시오 du -h:

FILESIZEINGB=$(du -h "$FILENAME" | awk '{print $1}')

또한:

  • 뒤에는 공백이 없어야 합니다 =.

답변2

또는 다음을 사용하고 싶지 않은 경우 du:

FILESIZE=$(ls -lah $FILENAME | awk '{ print $5}')
echo "Filesize is $FILESIZE"

답변3

누군가 AWK one-liner를 만든 것을 발견했는데 버그가 있었지만 수정했습니다. 테라바이트 뒤에도 페타바이트 단위로 추가했습니다.

FILE_SIZE=234234 # FILESIZE IN BYTES
FILE_SIZE=$(echo "${FILE_SIZE}" | awk '{ split( "B KB MB GB TB PB" , v ); s=1; while( $1>1024 ){ $1/=1024; s++ } printf "%.2f %s", $1, v[s] }')

모든 단일 시스템에 적용되는 것은 아니라는 점을 고려하여 statAWK 솔루션을 사용하겠습니다. 예; Raspberry Pi에는 stat없지만 awk.

관련 정보