У меня есть какая-то папка с файлами с именами «example_YY_MM_DD-HH.zip», и у меня есть 3 резервных копии в день. Мне нужно это:
1) Для резервных копий старше 1 недели мне нужен только один в день (в полночь «00» в ЧЧ)
2) Для резервных копий старше месяца мне нужен только один резервное копирование в неделю.
3) Для резервных копий старше одного года мне нужна только одна резервная копия в месяц (первый день месяца)
У меня есть только это, и я не знаю, что делать с частью IF.
Спасибо
#!/bin/sh
export NOW=$(date +"%d-%m-%Y")
export OUTPUT=/media/backup/logs/delete-old.txt
export BACKUP_DIR=
for file in $BACKUP_DIR
do
if $file
fi
done
Это должно сработать (если вы указали правильный полный или относительный путь, он в настоящее время находится в тесте каталога)
#! /bin/bash
nowday=$(date +"%d")
nowmonth=$(date +"%m")
nowyear=$(date +"%y")
#number of days since 1 Jan 1970 (today)
nowdays=$(($(date --date="20$nowyear-$nowmonth-$nowday" +"%s")/86400))
backup_dir="test/*"
#echo $backup_dir
for file in $backup_dir
do
hour=${file: -6: -4}
day=${file: -9: -7}
month=${file: -12: -10}
year=${file: -15: -13}
#number of days since 1 Jan 1970 (file)
days=$(($(date --date="20$year-$month-$day" +"%s")/86400))
if ((days < nowdays-365)); then
# more than one year
if ((10#$day == 1))&&((10#$hour == 0)); then
#day is 1 hour is 0 (we keep) use this space if you want to copy or something!
:
else
#Wrong day or hour
rm $file
fi
else if ((days < nowdays-31)); then
# more than one month (31 days)
if (((10#$day == 1))||((10#$day == 8))||((10#$day == 15))||((10#$day == 22))||((10#$day == 29)))&&((10#$hour == 0)); then
#day is 1,8,15,22,29 hour is 0 (we keep) use this space if you want to copy or something!
:
else
#Wrong day or hour
rm $file
fi
else if ((days < nowdays-7)); then
# more than one week
if ((10#$hour == 0)); then
#hour is zero se this space if you want to copy or something!
:
else
#Wrong hour
rm $file
fi
else
# less than one week (we keep) use this space if you want to copy or something!
:
fi fi fi
done
Я определил месяц как 31 день, чтобы всегда проверять, превышает ли он 1 месяц. Раз в неделю я выбираю дни 1 8 15 22 и 29, поэтому всегда есть первый день месяца. Это также работает в обратном каталоге, потому что он проверяет полночь для каждого файла.
Строки :
- это просто заполнители на случай, если вы захотите поместить туда код.
Перед запуском проверьте все, на случай, если возникнет ошибка!
Похоже, что это некоторые методы для достижения того, что вы ищете.
bash-скрипт для поиска старых файлов по дате выключения в имени файла