Я очень новичок в скрипте bash и мне нужно написать этот код.
Цель этого кода - удалить старые резервные копии в зависимости от того, сколько им лет. Имя папки - это дата, когда они были сделаны. Я думаю, что прокомментировал все, поэтому идея должна быть легко получена.
#!/bin/sh
#delte backups automatically
cd backup/backup_collection #make sure to be in the right directory
todate=$(date +”%Y-%m-%d”) #today
count_back=$(ls -l | grep "^d" | wc -l) #counts the number of folders in the current directory
back_names=( $( ls . ) ) #array with all filenames
for ((i=0; i<count_back; i++ ))
do
back_days[i]=$(( (todate +%s - todate +%s -d ${back_names[i]}) /86400 )) #this number tells us how many days ago this backup was
done
#the array with the days is already sorted from small to big
y=$(((${back_days[count_back-1]} + 2) / 7)) #y is the newest date, how many weeks ago
for ((i=count_back-2; i>=0; i—- ))
do
x=$(((${back_days[i]} + 2) / 7)) #how many weeks ago is the i-th entry
if [ x<8 ] || [ [ x>=8 ] && [ x<=26 ] && [ y-x>=2 ] ] || [ [ x>=26 ] && [ x<52 ] && [ y-x>=4 ] ] || [ [ x>=52 ] && [ y-x>=8 ] ]
then
y=$x
else
rmdir backup/backup_collection/${back_names[i]} #we remove the specific folder
fi
done
Код пока не работает. Например, эта строка не верна, я думаю.
back_days[i]=$(( (todate +%s - todate +%s -d ${back_names[i]}) /86400 ))
Я очень старался. Может быть, кто-то может мне помочь. Буду признателен за это!