Cómo obtener el tamaño del archivo en BASH con un tamaño legible, no en bytes

Cómo obtener el tamaño del archivo en BASH con un tamaño legible, no en bytes

Esto es lo que tengo en mi archivo de shell:

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

¿Puede decirme por qué no puedo ver el tamaño del archivo en forma legible?

Parece que $FILESIZEINGB no está configurado y no puedo ver el resultado en el echoresultado.

Respuesta1

No se puede establecer una variable de shell desde un proceso hijo, por lo que la configuración FILESIZEINGBno funcionaría de todos modos (y no funcionaría porque eso significa algo más en awkla sintaxis).

Solo usa du -h:

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

También:

  • No deberías tener un espacio después =.

Respuesta2

O si no quieres usar du:

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

Respuesta3

Encontré que alguien hizo una frase de AWK y tenía un error, pero lo solucioné. También agregué petabytes después de 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] }')

Teniendo en cuenta statque no está en todos los sistemas, usaría la solución AWK. Ejemplo; la Raspberry Pi no tiene statpero sí tiene awk.

información relacionada