
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 echo
saída.
Responder1
Você não pode definir uma variável shell de um processo filho - portanto, a configuração FILESIZEINGB
não funcionaria de qualquer maneira (e não funcionaria porque isso significa algo mais na awk
sintaxe).
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 stat
que não está presente em todos os sistemas, eu usaria a solução AWK. Exemplo; o Raspberry Pi não tem, stat
mas tem awk
.