
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 18607414901
bytes, ou seja, 18gb.
O que eu quero é executar o comando se for menor que 60 GB. O echo
comando é 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 wc
o comando com -c
a 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 stat
o comando com -c
opçã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*.gz
listará todos os arquivos em ordem inversa por carimbo de data/hora. O último é o mais novo. tail -n 1
mostrará 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, 0
ele 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