Код для удаления старых резервных копий, упорядоченный по дате - PullRequest
0 голосов
/ 06 сентября 2018

Я очень новичок в скрипте 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 ))

Я очень старался. Может быть, кто-то может мне помочь. Буду признателен за это!

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

вы можете использовать команду поиска

find $RAIZ/ -name "*.gz" -atime +2 -type f -print -exec rm {} \;

где $ RAIZ - каталог, в котором они находятся. atime - время древности в днях и * .gz все файлы расширений .gz Может быть, это не совсем то, что вам нужно, но это начало

0 голосов
/ 06 сентября 2018

Я использую что-то вроде этого

MAXKEEP=30
ZIPPER_EXT="gz"

find $LOG_DIR -type f -name "*.$ZIPPER_EXT" -mtime +$MAXKEEP -exec rm -rf {} \; 

LOG_DIR говорит само за себя, и я сжимаю (в другой части скрипта) свои файлы через определенное время, поэтому я ищу только сжатые файлы. Итак, эта строка стирает сжатый файл через 30 дней. Но я думаю, что это можно легко изменить в соответствии с вашими потребностями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...