Bash Script, encontre o tamanho do arquivo e compare a não execução

Bash Script, encontre o tamanho do arquivo e compare a não execução

Muito novo no bash, como você verá no código abaixo.

Quero obter o tamanho do arquivo em bytes de um arquivo, compará-lo com um valor fixo e enviar um email se este for muito pequeno.

Código:

#!/bin/bash
f=$(find /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz -ctime 0 -print -exec ls -l {} \; | awk '{print $5}')

if [$f -lt 60000000000] ; then
echo "hello";
fi

A saída do comando acima são 18607414901bytes, ou seja, 18gb.

O que eu quero é executar o comando se for menor que 60 GB. O echocomando é usado apenas para testar isso.

./backupsql.sh: line 4: [: missing `]'

Responder1

Você precisa de alguns espaços no teste:

if [ $f -lt 60000000000 ] ;then
    echo "Hello"
fi

Responder2

Você pode usar wco comando com -ca opção (imprima as contagens de bytes) para obter o tamanho do arquivo em bytes para comparação adicional:

#!/bin/bash

s=$(wc -c < /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz)
if [ $s -lt 60000000000 ]; then
echo "hello"
fi

Outra maneira é usar stato comando com -copção:

#!/bin/bash

s=$(stat -c "%s" /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz)
if [ $s -lt 60000000000 ]; then
echo "hello"
fi

-c- diz para usar o formato especificado

%s- o formato que representa o tamanho total, em bytes

Responder3

Roteiro? Aqui está uma frase:

[ $(stat -c %s $(ls -tr /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz | tail -n 1)) -lt 60000000000 ] && echo "Error" | mail -s "Too small" [email protected]

ls -tr /var/lib/xxxxxx/backups/xxxxxxxxDB*.gzlistará todos os arquivos em ordem inversa por carimbo de data/hora. O último é o mais novo. tail -n 1mostrará o último arquivo. $(..)é o texto de um comando. stat -c %s <file>mostrará o tamanho de um arquivo. [ ... ]é na verdade o comando /usr/bin/test se o código de retorno for, 0ele executará o comando depois &&.

Se você executar este comando no crontab você terá que escapar %com \, como[ $(stat -c \%s ..

A versão do script:

#! /bin/bash
LASTFILE=$(ls -tr /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz | tail -n 1)
if [ $(stat -c %s $LASTFILE) -lt 60000000000 ]; then
  echo "$LASTFILE" | mail -s "Too small" [email protected]
fi

informação relacionada