Como obter o tamanho do arquivo no BASH com tamanho legível e não em bytes

Como obter o tamanho do arquivo no BASH com tamanho legível e não em bytes

Aqui está o que tenho no meu arquivo shell:

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

Você pode me dizer por que não consigo ver o tamanho do arquivo em formato legível?

Parece que $FILESIZEINGB não está definido e não consigo ver o resultado na echosaída.

Responder1

Você não pode definir uma variável shell de um processo filho - portanto, a configuração FILESIZEINGBnão funcionaria de qualquer maneira (e não funcionaria porque isso significa algo mais na awksintaxe).

Apenas use du -h:

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

Também:

  • Você não deveria ter um espaço depois =.

Responder2

Ou se você não quiser usar du:

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

Responder3

Encontrei alguém que fez uma linha única do AWK e tinha um bug, mas eu o corrigi. Também adicionei petabytes após terabytes.

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] }')

Considerando statque não está presente em todos os sistemas, eu usaria a solução AWK. Exemplo; o Raspberry Pi não tem, statmas tem awk.

informação relacionada