企业软件包管理过程中,源中一个服务的安装包有很多版本,导致打包创建索引时非常非常慢,这个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`即可。
本文出自 “尼族部落” 博客,转载请与作者联系!
原文地址:http://qwgxiaoxiao.blog.51cto.com/8239258/1531571