Script que compara os tamanhos de 2 arquivos e envia uma mensagem de aviso

2

Eu sou um noob completo no script, mas preciso de um script que compare os tamanhos de dois arquivos e forneça um aviso se um desses arquivos for 10% maior que o outro.

Até agora, eu descobri isso:

#!/bin/bash
test1=/trans/home/user/test1
test2=/trans/home/user/test2
test1=$(stat -c%s "$test1")
test2=$(stat -c%s "$test2")

if (( test2 > 110 * test1 ))
then
  echo "WARNING: test2 has increased 10% or more in size"
fi

Eu criei dois arquivos com touch e alterei seus tamanhos com truncate. Não importa o tamanho que eu dê a eles, isso não dará a mensagem de aviso, a menos que eu alterne o maior que para < sinal, em seguida, dá a mensagem de aviso. No entanto isso não funciona para mim.

Qualquer ideia de como editar isso para o trabalho será bem-vinda.

Cumprimentos.

    
por stefzeer 31.08.2018 / 08:25

3 respostas

2

Sua matemática não está correta. Abaixo está um script que usa bc calculadora de precisão que pode fazer a operação de ponto flutuante sem se preocupar com estouro em bash

#!/bin/bash

test1=/trans/home/user/test1
test2=/trans/home/user/test2
test1sz=$(stat -c%s "$test1")
test2sz=$(stat -c%s "$test2")

[ $(echo "scale=2; ${test2sz} > ${test1sz}*1.1" | bc) -eq 1 ] && {
  echo "WARNING: ${test2} has increased 10% or more in size"
}
    
por 31.08.2018 / 09:13
3

Você precisa

if (( test2 > 110 * test1 / 100))

tamanho mais 10% é 1,10 ou 110/100, não 110. Observe que você deve primeiro multiplicar e depois dividir, caso contrário, 110/100 arredondado para um inteiro é apenas 1,00. Por outro lado, 110 * test1 pode exceder o intervalo inteiro, embora isso não seja provável com tamanhos de arquivo e inteiros de 64 bits.

    
por 31.08.2018 / 08:29
0

Consegui fazer assim:

#!/bin/bash
test1=/trans/home/stefan01/test1
test2=/trans/home/stefan01/test2
test1=$(stat -c%s "$test1")
test2=$(stat -c%s "$test2")
PERC=$(bc <<< "scale=2; ($test2 - $test1)/$test1 * 100")
echo "$PERC %"

Isso mostra a diferença exata de tamanho de arquivo em porcentagens. Eu posso agora simplesmente se / então para isto também exibir uma mensagem de aviso se o resultado for 10% ou mais.

Obrigado pela sua ajuda pessoal.

    
por 31.08.2018 / 15:28