Bash 如何按创建日期和文件大小比较不同的文件?
我想检查过去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.gzBash 如何按创建日期和文件大小比较不同的文件?,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
只需将~/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];然后