Script de bash que detecta se um arquivo tem o tamanho correto

0

Estou tentando fazer com que este roteiro de script seja enviado e enviado por email quando detecta que um determinado tipo de arquivo (arquivos terminados em ".gz"), que foi modificado pela última vez há 24 horas, está abaixo de um determinado tamanho , Atualmente tenho em execução no meu computador inteiro. (Eu tenho isso definido para 10 kilobytes).

Ele envia um e-mail de qualquer maneira, eu espero que ele apenas envie um se realmente detectar que o arquivo está abaixo do limite, e se alguém puder, por favor, passe por ele e tente me dizer onde eu estraguei tudo que seria ótimo! Este é um dos meus primeiros scripts sérios, então vá com calma no vocabulário!

1) O script encontrará todos os arquivos em um diretório que termina com ".gz" que foi modificado nas últimas 24 horas.

2) Ele irá verificar esses arquivos e certificar-se de que eles estão acima de um certo limite de tamanho (digamos 10 kilobytes, por exemplo)

3) Se estiverem, não farão nada, mas se estiverem abaixo desse limite, um email será enviado para o endereço de e-mail mencionado

#!/bin/bash
for file in /*; do
stat $file
    FAILURE= find . -name "*.gz" -size -10k -mtime -1 -printf 'Failure %p\n'
done
if $FAILURE
then
    echo "The backup test has failed!" | mail -s "BACKUP FAILURE" [email protected]
fi
    
por Aiden Prohaska 23.06.2015 / 01:47

2 respostas

1

Aqui está seu script modificado ligeiramente:

#!/bin/bash
if files=$(find . -name "*.gz" -size -10k -mtime -1 -print) ; then
   echo "The backup test has failed!\n$files" | mail -s "BACKUP FAILURE"   [email protected]
fi

Você não precisa colocar isso em um loop for; existe um loop implícito no comando find .

Uma técnica de depuração que você pode usar se você ainda não descobriu isso é executar partes dos comandos acima para testá-las.

No entanto, há também um depurador bash .

    
por 23.06.2015 / 06:02
0

Eu suponho que você quer verificar se há arquivos gz pequenos nesta pasta / usr / test, o que deve ajudá-lo. Ele enviará um arquivo de log de todos os arquivos gz nesse caminho e enviará a lista por e-mail. Você pode usar esta lista para uso posterior.

Meu script seria:

#!/bin/bash
size_checker ()
{
cd /usr/test
ls *.gz > gzfiles
for FILE in 'cat gzfiles'
 do
  SIZE='ls -la $FILE | awk '{print $5}''
   if [ "$SIZE" -lt 10241 ]
    then
     LAST_MODIFIED='ls -la $FILE | awk '{print $6,$7}'' 
    echo "${FILE} ${LAST_MODIFIED}" >> log
   if
done   
uuencode log log.txt | mailx -s "Log of small gz files" [email protected]
}
size_checker
exit 0

O tempo modificado foi adicionado, você receberá todos os arquivos gz menores ou iguais a 10kb com a data da última modificação.

    
por 23.06.2015 / 02:47