標籤:shell指令碼 軟體包清理
企業軟體包管理過程中,源中一個服務的安裝包有很多版本,導致打包建立索引時非常非常慢,這個shell指令碼就是用來解決這個問題。(企業實習時寫的第一個指令碼)
#!/bin/bashrm -fr ~/update 2> /dev/nullmkdir ~/updateread -p "Please input your absolute PATH:(your path should end with "/"): " pathls $path > ~/qtcat ~/qt | grep .rpm$ |awk ‘{print $NF}‘ > ~/testcat ~/test | awk ‘BEGIN{FS="-"}{$1=$1;print $0}‘ > ~/test1lines=`cat ~/test | wc -l`############################################################處理第一個軟體包cat ~/test1 | sed -n ‘1p‘ | awk ‘BEGIN{RS=" "}{print $0}‘ | sed ‘/^$/d‘ > ~/f1firsta=`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++))doaline=$i((bline=i+1))#########################################################本行和下一行軟體包的各個欄位匯入到檔案中cat ~/test1 | sed -n ‘‘$aline‘p‘ | awk ‘BEGIN{RS=" "}{print $0}‘ | sed ‘/^$/d‘ > ~/test2cat ~/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/$var2bdone##########################################################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 fidonerm -f ~/test1 ~/test2 ~/test3 ~/f1 ~/f2 ~/qt ~/testrm -fr ~/update
要刪除的軟體包在disp中儲存,要保留的軟體包在save中儲存,其中只保留了最新的3個軟體包
實際刪除前要先備份,再刪除,最終執行rm -f `cat disp`即可。
本文出自 “尼族部落” 部落格,轉載請與作者聯絡!