首页 > 代码库 > 软件包清理的shell脚本

软件包清理的shell脚本


      企业软件包管理过程中,源中一个服务的安装包有很多版本,导致打包创建索引时非常非常慢,这个shell脚本就是用来解决这个问题。(企业实习时写的第一个脚本)

#!/bin/bash
rm -fr  ~/update 2> /dev/null
mkdir ~/update
read -p "Please input your absolute PATH:(your path should end with "/"): " path
ls $path > ~/qt
cat ~/qt | grep .rpm$ |awk ‘{print $NF}‘ > ~/test
cat ~/test | awk ‘BEGIN{FS="-"}{$1=$1;print $0}‘ > ~/test1
lines=`cat ~/test | wc -l`
###########################################################
#处理第一个软件包
cat ~/test1 | sed -n ‘1p‘ | awk ‘BEGIN{RS=" "}{print $0}‘ | sed ‘/^$/d‘ > ~/f1
firsta=`cat ~/f1 | sed ‘=‘ | sed ‘N;s/\n/ /‘ | awk ‘$2~/^[0-9].[0-9]?[0-9]?.?[0-9]?[0-9]?$/{print $2}‘`
firstb=`cat ~/test |sed -n ‘s/-/  /gp‘ | sed -n  ‘1p‘ | awk -v i=$firsta ‘BEGIN{FS=i}{print $1}‘ | sed ‘s/ //g‘`
cat ~/test | sed -n ‘1p‘ > ~/update/$firstb
#######################################################
for ((i=1;i<$lines;i++))
do
aline=$i
((bline=i+1))
########################################################
#本行和下一行软件包的各个字段导入到文件中
cat ~/test1 | sed -n ‘‘$aline‘p‘ | awk ‘BEGIN{RS=" "}{print $0}‘ | sed ‘/^$/d‘ > ~/test2
cat ~/test1 | sed -n ‘‘$bline‘p‘ | awk ‘BEGIN{RS=" "}{print $0}‘ | sed ‘/^$/d‘ > ~/test3
#########################################################
#过滤出版本号保存在变量中
var1a=`cat ~/test2 | sed ‘=‘ | sed ‘N;s/\n/ /‘ | awk ‘$2~/^[0-9].[0-9]?[0-9]?.?[0-9]?[0-9]?$/{print $2}‘`
var1b=`cat ~/test3 | sed ‘=‘ | sed ‘N;s/\n/ /‘ | awk ‘$2~/^[0-9].[0-9]?[0-9]?.?[0-9]?[0-9]?$/{print $2}‘`
#########################################################
#根据版本号将软件包前后分为2部分,并将前半部分中间的空格或者-去掉,并保存到变量>中
var2a=`cat ~/test |sed -n ‘s/-/  /gp‘ | sed -n ‘‘$aline‘p‘ | awk -v i=$var1a ‘BEGIN{FS=i}{print $1}‘ | sed ‘s/ //g‘`
var2b=`cat ~/test |sed -n ‘s/-/  /gp‘ | sed -n ‘‘$bline‘p‘ | awk -v i=$var1b ‘BEGIN{FS=i}{print $1}‘ | sed ‘s/ //g‘`
###########################################################
#根据软件版本号前面的字段将软件分类到指定的文件目录中
cat ~/test | sed -n ‘‘$bline‘p‘ >>  ~/update/$var2b
done
##########################################################
fial=(`ls ~/update`) #设置数组存放软件存放文件
fico=${#fial[*]}   #数组长度
for ((j=0;j<$fico;j++)) #遍历数组
do
        lines=`cat ~/update/${fial[$j]}| wc -l`
        if [ $lines -le 3 ] #文件行数小于3,将文件内容加到save文件中
                then
                cat ~/update/${fial[$j]} >> save
        else            #文件行数大于3的情况
                cat ~/update/${fial[$j]} | sed ‘i\\‘$path‘‘ | sed -n ‘N;s/\n//gp‘ > ~/f2
                ls -t `cat ~/f2` | head -n 3 | awk ‘BEGIN{FS="/"}{print $NF}‘>> ~/save
                ls -t `cat ~/f2` | tail -n +4 | awk ‘BEGIN{FS="/"}{print $NF}‘>> ~/disp
        fi
done
rm -f ~/test1 ~/test2 ~/test3 ~/f1 ~/f2  ~/qt ~/test
rm -fr ~/update

要删除的软件包在disp中保存,要保留的软件包在save中保存,其中只保留了最新的3个软件包

实际删除前要先备份,再删除,最终执行rm -f `cat disp`即可。

本文出自 “尼族部落” 博客,转载请与作者联系!