Bash 如何按创建日期和文件大小比较不同的文件?

Bash 如何按创建日期和文件大小比较不同的文件?,bash,database-backups,Bash,Database Backups,我想检查过去2天的备份文件,并比较 今天的当前文件的大小大于昨天的另一个文件的大小 不同的备份文件名 我有10台MYSQL服务器,每天从数据库创建一个备份并发送到备份服务器 某些服务器有多个数据库,因此 在同一天创建不同的备份文件并发送到备份服务器。我 需要确定今天是否进行了备份,以及今天的文件是否 比昨天的旧文件大 55米25。Mai 03:45/home/backup/server1/SW1_20190525.sql.gz 48米25。Mai 03:45/home/backup/server

我想检查过去2天的备份文件,并比较 今天的当前文件的大小大于昨天的另一个文件的大小 不同的备份文件名

我有10台MYSQL服务器,每天从数据库创建一个备份并发送到备份服务器

某些服务器有多个数据库,因此 在同一天创建不同的备份文件并发送到备份服务器。我 需要确定今天是否进行了备份,以及今天的文件是否 比昨天的旧文件大

55米25。Mai 03:45/home/backup/server1/SW1_20190525.sql.gz

48米25。Mai 03:45/home/backup/server1/SW2_20190525.sql.gz

39米25。Mai 03:45/home/backup/server1/SW3_20190525.sql.gz

35米25。Mai 03:45/home/backup/server1/SW4_20190525.sql.gz

42米25。Mai 03:45/home/backup/server1/SW5_20190525.sql.gz

57米26。Mai 03:45/home/backup/server1/SW1_20190526.sql.gz

51米26。Mai 03:45/home/backup/server1/SW2_20190526.sql.gz

20K 26。Mai 03:45/home/backup/server1/SW3_20190526.sql.gz

45米26。Mai 03:45/home/backup/server1/SW4_20190526.sql.gz

48米26。Mai 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

当OK时说0 OK

当不说1错误时,例如=>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

谢谢你的快速回答,但正如我提到的路径对于所有文件都是一样的,让我进一步解释一下:今天我将有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_20190527.sql.gz,SW5_20190527.sql.gz,10天后,我将有10个来自sw1的备份文件和10个来自sw2的备份文件等。我如何才能找到最近两天创建的文件,例如SW1_20190527和SW1_20190528,并相互比较它们的大小?@user11563595我编辑了我的答案以反映您的评论。我相信这会成功的。如果你还需要帮助,请告诉我。非常感谢。这很完美,我还有一个问题,如果我从今天开始归档了10个不同的备份名称,例如SW1-ABCD_20190528.sql.gz,SW1-FOP_20190528.sql.gz。等等,如果我昨天归档了10个相同但只是不同日期的文件,我该怎么办。例如SW1-ABCD_20190527.sql.gz,SW1-FOP_20190527.sql.gz.etc?@user11563595应该可以工作,如果不行,我们将重试。让我知道这是否有效。@user11563595如果[$file1-ge$file2]您的条件;那么应该这样写,如果[$file1-nt$file2];然后