我是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 ))
我非常努力。也许有人可以帮助我。我会很感激!
我正在使用的是类似的东西
MAXKEEP=30
ZIPPER_EXT="gz"
find $LOG_DIR -type f -name "*.$ZIPPER_EXT" -mtime +$MAXKEEP -exec rm -rf {} \;
LOG_DIR是自我解释的,我在一段时间后压缩(在脚本的其他部分)我的文件,所以我只是在寻找压缩文件。因此,该行会在30天后删除压缩文件。但是我认为可以轻松修改以满足您的需求。
你可以使用find命令
find $RAIZ/ -name "*.gz" -atime +2 -type f -print -exec rm {} \;
其中$ RAIZ是它们所在的目录。 atime是以天为单位的古代时间和* .gz所有扩展文件.gz也许它不是你需要的,但它是一个开始