Скрипт, который сравнивает 2 размера файла и выдает предупреждение
294
stefzeer
Я полный новичок в написании сценариев, но мне нужен сценарий, который сравнивает размеры двух файлов и выдает предупреждение, если один из этих файлов на 10% больше другого.
До сих пор я придумал это:
#!/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
Я создал два файла одним касанием и сузил их размеры с помощью усечения. Независимо от того, какие размеры я им даю, это не выдаст предупреждающее сообщение, если я не переключу знак «больше» на «<», тогда оно выдаст предупреждающее сообщение. Однако это не работает для меня.
Любые идеи, как отредактировать это для работы, будут оценены.
С уважением.
3 ответа на вопрос
3
RalfFriedl
Тебе нужно
if (( test2 > 110 * test1 / 100))
размер плюс 10% равен 1,10 или 110/100, а не 110. Обратите внимание, что вы должны сначала умножить, а затем разделить, в противном случае значение 110/100, округленное до целого числа, составляет всего 1,00. С другой стороны, 110 * test1 может превышать целочисленный диапазон, хотя это маловероятно с размерами файлов и 64-битными целыми числами.
В этом случае умножение на 11, а затем деление на 10 уменьшит риск переполнения. `test1 / 10 + test1` может быть даже лучше.
Kamil Maciorowski 6 лет назад
0
@KamilMaciorowski Это правда, но, как я уже упоминал, риск переполнения 64-битных файлов с размером файла невелик, и легко понятный код также имеет свое значение.
RalfFriedl 6 лет назад
0
2
Alex
Ваша математика не верна. Ниже приведен скрипт, использующий bcпрецизионный калькулятор, который может выполнять операции с плавающей запятой, не беспокоясь о переполнении в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; $ > $*1.1" | bc) -eq 1 ] && { echo "WARNING: $ has increased 10% or more in size" }
Это показывает точную разницу в размере файлов в процентах. Теперь я могу просто, если / затем, чтобы он также отображал предупреждающее сообщение, если результат составляет 10% или более.