Bash Script, localize o tamanho do arquivo e compare-o sem funcionar [duplicado]

0

Muito novo para bater como você verá no código abaixo.

Eu quero obter o tamanho do arquivo em bytes de um arquivo, compará-lo a um valor fixo e enviar um email se este último 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 é 18607414901 bytes, ou seja, 18 gb.

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

./backupsql.sh: line 4: [: missing ']'
    
por Nick Meyjes 19.05.2017 / 17:03

3 respostas

0

Você precisa de alguns espaços no teste:

if [ $f -lt 60000000000 ] ;then
    echo "Hello"
fi
    
por 19.05.2017 / 17:11
0

Você pode usar o comando wc com a opção -c ( imprimir 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 o comando stat com -c option:

#!/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 representando o tamanho total, em bytes

    
por 19.05.2017 / 17:46
0

Script? Aqui está um verso:

[ $(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 reversa por timestamp. 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. [ ... ] é realmente o comando / usr / bin / test se o código de retorno for 0 , ele executará o comando após && .

Se você executar este comando no crontab, terá que escapar de % 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
    
por 19.05.2017 / 18:22