Я хочу проверить файлы резервных копий за последние 2 дня и сравнить, размер текущего файла (сегодня) больше, чем другого (вчера) с разные имена файлов резервных копий.
У меня есть 10 серверов с MYSQL, и каждый день я создаю резервную копию каждого сервера из базы данных и отправляю на сервер резервного копирования.
На каком-то сервере имеется более одной базы данных, поэтому сервер создавать разные файлы резервных копий в один и тот же день и отправлять на резервный сервер. я нужно быть уверенным, была ли сделана резервная копия сегодня и был ли файл (сегодня) больше, чем старый файл (вчера)?
55M 25. Mai 03:45 /home/backup/server1/SW1_20190525.sql.gz
48M 25. Mai 03:45 /home/backup/server1/SW2_20190525.sql.gz
39M 25. Mai 03:45 /home/backup/server1/SW3_20190525.sql.gz
35M 25. Mai 03:45 /home/backup/server1/SW4_20190525.sql.gz
42M 25. Mai 03:45 /home/backup/server1/SW5_20190525.sql.gz
57M 26. Mai 03:45 /home/backup/server1/SW1_20190526.sql.gz
51M 26. Mai 03:45 /home/backup/server1/SW2_20190526.sql.gz
20K 26. Mai 03:45 /home/backup/server1/SW3_20190526.sql.gz
45M 26. Mai 03:45 /home/backup/server1/SW4_20190526.sql.gz
48M 26. Mai 03:45 /home/backup/server1/SW5_20190526.sql.gz
i expect to check:
SW1_20190526.sql.gz > SW1_20190525.sql.gz
SW2_20190526.sql.gz > SW2_20190525.sql.gz
SW3_20190526.sql.gz > SW3_20190525.sql.gz
SW4_20190526.sql.gz > SW4_20190525.sql.gz
SW5_20190526.sql.gz > SW5_20190525.sql.gz
when OK say 0 OK
when not say 1 Error (for example => SW3_20190526.sql.gz)
Просто измените ~/testing/* на path/to/your/files* не забудьте поставить *
ПРИМЕЧАНИЕ: Эта версия скрипта предполагает, что вы запускаете его в нужный день. Например (дата-команда и последняя запись в файле совпадают)
# Set directory to loop through
dir=~/testing/*
# Todays date used to grep for today's file
today=$(date +%Y%m%d)
# Yesterday's date used to grep for yesterday's file
yesterday=$(date -d "yesterday" '+%Y%m%d')
# Start point to loop through each SW? files
num=1
# Start looping through directory
for file in $dir; do
# Get today's file by date
file_td=$(ls SW[$num]* | grep $today)
# Get yesterday's file by date
file_yd=$(ls SW[$num]* | grep $yesterday)
# Get size of today's file
size_td=$(stat -c %s $file_td)
# Get size of yesterday's file
size_yd=$(stat -c %s $file_yd)
# Test if file size is equal or greater than
if (($size_td >= $size_yd)); then
echo "$file_td is equal or bigger that $file_yd"
else
echo "$file_yd is bigger $file_td"
fi
# Limit SW? to 5 so its doesn't attempt the script on none existing file
# You change the 5 to how ever many SW's there are in the directory
((num++)) && [[ $num > 5 ]] && exit
done
ПРИМЕЧАНИЕ: Эта версия скрипта ничего не предполагает и просто берет две последние записи, принятые каталогом. Это имитирует «сегодня» и «вчера» без необходимости запуска сценария в последний день.
# File Directory to loop through
dir=~/testing/*
# Starting point for file names SW1 - SW?
num=1
# Begin looping through directory
for file in $dir; do
# Set the latest file in directory SW? to today
file_td=$(ls SW[$num]* | sort -u -r | sed '1q;d')
# Set the second latest file in directory SW? to yesterday
file_yd=$(ls SW[$num]* | sort -u -r | sed '2q;d')
# Get size of today's file
size_td=$(stat -c %s $file_td)
# Get size of yesterday's file
size_yd=$(stat -c %s $file_yd)
# Test if file size is equal or greater than
if (($size_td >= $size_yd)); then
echo "$file_td is equal or bigger that $file_yd"
else
echo "$file_yd is bigger $file_td"
fi
# Limit SW? to 5 so its doesn't attempt the script on none existing files
# You change the 5 to how ever many SW's there are in the directory
((num++)) && [[ $num > 5 ]] && exit
done
@user11563595 user11563595 я отредактировал свой ответ, чтобы отразить ваш комментарий. я верю, что это сделает это. дайте мне знать, если вам нужна помощь
большое спасибо. это было прекрасно, у меня просто еще один вопрос, что мне делать, если у меня есть файл 1 (10 разных имен резервных копий с сегодняшнего дня, например, SW1-ABCD_20190528.sql.gz, SW1-FOP_20190528.sql.gz .etc) и файл 2 с 10 одинаковых файлов, но только в другое время дня (yesterday.eg, SW1-ABCD_20190527.sql.gz, SW1-FOP_20190527.sql.gz.etc)?
@user11563595 user11563595 Это должно сработать, если нет, мы попробуем еще раз. Дайте мне знать, если это работает в первую очередь.
@ user11563595 ваше условие «if [«$file1» -ge «$file2» ]; then» должно быть написано так: «if [«$file1» -nt «$file2» ]; then»
нет не помогает, у меня всегда "2" значит ошибка и это не правда :-(
я говорю, что вам не нужна переменная для проверки размеров файлов. [[ $file1 -nt $file2 ]] && echo "он больше" или [[ ~/mypath/to/file1 -nt ~/mypath/to/file2 ]] && echo "file1 больше" || эхо "файл2 больше"
не могли бы вы изменить свой код с новыми переменными (сегодня, вчера) и вашим последним комментарием? Я путаю некоторых сейчас.
@user11563595 user11563595 я обновил код для вас, код для вас с двумя версиями, пожалуйста, внимательно прочитайте. Также, пожалуйста, отметьте ответ на вопрос, если это работает для вас.
спасибо за ваш быстрый ответ, но, как я уже говорил, путь одинаков для всех файлов, позвольте мне объяснить это подробнее: сегодня у меня будет 5 разных файлов резервной копии: SW1_20190528.sql.gz, SW2_20190528.sql.gz, SW3_20190528.sql.gz, SW4_20190528.sql.gz,SW5_20190528.sql.gz и точно как вчера: SW1_20190527.sql.gz,SW2_20190527.sql.gz,SW3_20190527.sql.gz,SW4_5_201909527.201909527.sql,sql.gz gz, через 10 дней у меня будет 10 файлов резервных копий из sw1 и 10 файлов резервных копий из sw2 и т. д.... Как я могу найти только что созданные файлы за последние 2 дня, например SW1_20190527 и SW1_20190528, и сравнить их размер друг с другом?