Как я могу сравнить разные файлы по дате создания и размеру файла? - PullRequest
0 голосов
/ 27 мая 2019

Я хочу проверить файлы резервных копий за последние 2 дня и сравнить, если размер текущего файла (сегодня) больше другого (вчера) с разные имена файлов резервных копий.

У меня есть 10 Сервер с MYSQL и каждый день создаю каждый сервер резервную копию из базы данных и отправляю на сервер резервного копирования.

На каком-то сервере существует более одной базы данных, поэтому сервер создать разные файлы резервных копий в один день и отправить на сервер я необходимо убедиться, что резервное копирование было сделано сегодня и если файл (сегодня) больше старого файла (вчера)?

55M 25. Май 03:45 /home/backup/server1/SW1_20190525.sql.gz

48M 25. Май 03:45 /home/backup/server1/SW2_20190525.sql.gz

39M 25. Май 03:45 /home/backup/server1/SW3_20190525.sql.gz

35M 25. Май 03:45 /home/backup/server1/SW4_20190525.sql.gz

42M 25. Май 03:45 /home/backup/server1/SW5_20190525.sql.gz

57M 26. Май 03:45 /home/backup/server1/SW1_20190526.sql.gz

51M 26. Май 03:45 /home/backup/server1/SW2_20190526.sql.gz

20K 26. Май 03:45 /home/backup/server1/SW3_20190526.sql.gz

45M 26. Май 03:45 /home/backup/server1/SW4_20190526.sql.gz

48M 26. Май 03:45 /home/backup/server1/SW5_20190526.sql.gz

Я ожидаю проверить:

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

когда ОК, скажи 0 ОК

когда не сказать 1 Ошибка (например => SW3_20190526.sql.gz)

1 Ответ

0 голосов
/ 28 мая 2019

Просто измените ~ / testing / * на путь / на / 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
...