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

1

Aqui está o que eu 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 de forma legível?

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

Obrigado antecipadamente!

    
por Tony Stark 15.04.2016 / 18:10

3 respostas

3

Você não pode definir uma variável shell a partir de um processo filho - portanto, definir FILESIZEINGB não funcionaria de qualquer maneira (e isso não funcionaria porque isso significa outra coisa na sintaxe awk ).

Use apenas du -h :

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

Além disso:

  • Você não deve ter um espaço depois de = .
por muru 15.04.2016 / 18:16
2

Ou se você não quiser usar du :

FILESIZE=$(ls -lah $FILENAME | awk '{ print $5}')
echo "Filesize is $FILESIZE"
    
por EdiD 15.04.2016 / 18:22
1

Eu encontrei alguém que fez um one-liner AWK, e ele tinha um bug, mas eu consertei. Eu 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 que stat não está em todos os sistemas, eu usaria a solução AWK. Exemplo; o Raspberry Pi não tem stat , mas tem awk .

    
por findrbot_admin 03.07.2017 / 02:33