用于删除按日期排序的旧备份的代码

问题描述 投票:0回答:2

我是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 ))

我非常努力。也许有人可以帮助我。我会很感激!

bash shell date terminal backup
2个回答
1
投票

我正在使用的是类似的东西

MAXKEEP=30
ZIPPER_EXT="gz"

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

LOG_DIR是自我解释的,我在一段时间后压缩(在脚本的其他部分)我的文件,所以我只是在寻找压缩文件。因此,该行会在30天后删除压缩文件。但是我认为可以轻松修改以满足您的需求。


0
投票

你可以使用find命令

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

其中$ RAIZ是它们所在的目录。 atime是以天为单位的古代时间和* .gz所有扩展文件.gz也许它不是你需要的,但它是一个开始

© www.soinside.com 2019 - 2024. All rights reserved.