
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 echo
resultado.
Respuesta1
No se puede establecer una variable de shell desde un proceso hijo, por lo que la configuración FILESIZEINGB
no funcionaría de todos modos (y no funcionaría porque eso significa algo más en awk
la 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 stat
que no está en todos los sistemas, usaría la solución AWK. Ejemplo; la Raspberry Pi no tiene stat
pero sí tiene awk
.