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

Я хочу проверить файлы резервных копий за последние 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)

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
155
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто измените ~/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

спасибо за ваш быстрый ответ, но, как я уже говорил, путь одинаков для всех файлов, позвольте мне объяснить это подробнее: сегодня у меня будет 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, и сравнить их размер друг с другом?

user11563595 28.05.2019 08:21

@user11563595 user11563595 я отредактировал свой ответ, чтобы отразить ваш комментарий. я верю, что это сделает это. дайте мне знать, если вам нужна помощь

goose goose 28.05.2019 09:58

большое спасибо. это было прекрасно, у меня просто еще один вопрос, что мне делать, если у меня есть файл 1 (10 разных имен резервных копий с сегодняшнего дня, например, SW1-ABCD_20190528.sql.gz, SW1-FOP_20190528.sql.gz .etc) и файл 2 с 10 одинаковых файлов, но только в другое время дня (yesterday.eg, SW1-ABCD_20190527.sql.gz, SW1-FOP_20190‌​527.sql.gz.etc)?

user11563595 28.05.2019 13:45

@user11563595 user11563595 Это должно сработать, если нет, мы попробуем еще раз. Дайте мне знать, если это работает в первую очередь.

goose goose 28.05.2019 18:23

@ user11563595 ваше условие «if [«$file1» -ge «$file2» ]; then» должно быть написано так: «if [«$file1» -nt «$file2» ]; then»

goose goose 28.05.2019 23:39

нет не помогает, у меня всегда "2" значит ошибка и это не правда :-(

user11563595 29.05.2019 16:11

я говорю, что вам не нужна переменная для проверки размеров файлов. [[ $file1 -nt $file2 ]] && echo "он больше" или [[ ~/mypath/to/file1 -nt ~/mypath/to/file2 ]] && echo "file1 больше" || эхо "файл2 больше"

goose goose 29.05.2019 23:19

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

user11563595 30.05.2019 15:07

@user11563595 user11563595 я обновил код для вас, код для вас с двумя версиями, пожалуйста, внимательно прочитайте. Также, пожалуйста, отметьте ответ на вопрос, если это работает для вас.

goose goose 30.05.2019 19:35

Другие вопросы по теме