Хорошо, я переделал этот скрипт, и, сортировав его назад, похоже, он должен работать. Он сравнивает год и месяц до предыдущего, и если оно ниже, это должна быть последняя запись на этот месяц.
#!/bin/bash
#the tac reverses the listing, so we go from newest to oldest, vital for our logic below
FILES=`ls | tac`
#create a cutoff date by taking current date minus our 60 day limit
CUTOFFDATE=`date --date="60 days ago" +%Y%m%d`
#we are setting this value to month 13 of the current year
LASTYEARMONTH=`date +%Y`13
for file in $FILES; do
#get datestamp
FILEDATE=`expr match "$file" '.*\(20[0-9][0-9][0-9][0-9][0-9][0-9]\)'`
#get year and month, ie 201410
THISYEARMONTH=${FILEDATE:0:6}
if [ ! -z $FILEDATE ] && [ $THISYEARMONTH -lt $LASTYEARMONTH ]; then
echo "$file IS THE LAST FILE OF THE MONTH. NOT DELETING"
else
#now we see if the file is older than 60 days (ie, has a LOWER unix timestamp than our cutoff)
if [ ! -z $FILEDATE ] && [ $FILEDATE -lt $CUTOFFDATE ]; then
echo "$file has a file date of $FILEDATE which is older than 60 days."
#uncomment this next line to remove
#rm $file
fi
fi
LASTYEARMONTH=$THISYEARMONTH
done
Так как это слишком долго для комментария, то...
Есть две вещи, которые заинтриговали меня:
Во-первых, /dev/sda и /dev/sdb - это два разных физических диска, иначе мы бы говорили о /dev/sda1 и /dev/sda2. Поэтому если мы говорим о разных физических дисках, их производительность может отличаться.
Во-вторых, если эта информация неверна и у нас есть два раздела на одном диске (/dev/sda1 и /dev/sda2), какой размер физического диска - более 2 ТБ - должен быть правильно выровнен, иначе у вас возникнут проблемы с производительностью. Может ли быть так, что один из разделов имеет аллокацию, а другой нет? Вы пробовали тестировать скорость разделов другими способами, кроме вашей программы? Проверьте это , чтобы проверить скорость диска.