更新了e-file
之前发布的e-file,看起来好像还是挺受欢迎的,没多久,就有人给写了ebuild文件,进了gentoo-china overlay.于是打算再稍微完善一下.
周末去了趟上海,也没空更新这个脚本,拖到今天,终于弄好了,呵呵.
ChangeLog:
20081125:
优化代码结构
增加本地已安装版本的显示
增加Homepage和Description的显示
老套路,贴代码和截图:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
#!/bin/sh #AUTHOR: bones7456 (bones7456<at>gmail<dot>com) ##License: GPL #e-file is like apt-file for gentoo, but data is online VERSION=20081125 function printhelp(){ cat <<EOF This is e-file ($VERSION) Usage: `basename $0` filename EOF } if [[ $# -ne 1 ]];then printhelp exit 1 fi URL="http://www.portagefilelist.de/index.php/Special:PFLQuery2?file=$1&searchfile=lookup&lookup=file#result" w3m -dump -cols 3000 $URL | awk ' BEGIN{ FLAG=0 FOUND=0 "emerge --info | grep PORTDIR" | getline split($0,PORTDIR,/\"/) } { if($1=="dir" && $2=="package"){ FLAG=1 next } if($1=="Retrieved" && $2=="from"){ if(FOUND){ for(pkg in vers){ split(pkg,ii,/\//) NF=0 cmd="ls -tgGd --time-style=+%c /var/db/pkg/" pkg "* 2>/dev/null" cmd | getline if(NF==0){ installed=0 }else{ installed=1 install_time="" for(i=4;i<NF;i++)install_time=install_time " " $i install_time=substr(install_time,2) split($NF,install_arr,pkg "-") } NF=0 cmd="(grep -h HOMEPAGE " PORTDIR[2] "/" pkg "/*.ebuild | tail -n 1)2>/dev/null" cmd | getline if(NF==0){ HOMEPAGE="" }else{ split($0,tempArr,/\"/) HOMEPAGE=tempArr[2] } NF=0 cmd="(grep -h DESCRIPTION " PORTDIR[2] "/" pkg "/*.ebuild | tail -n 1)2>/dev/null" cmd | getline if(NF==0){ DESCRIPTION="" }else{ split($0,tempArr,/\"/) DESCRIPTION=tempArr[2] } setcolor(1,32) if(installed){ printf("[I] ") }else{ printf(" * ") } clearcolor() printf("%s/",ii[1]) setcolor(1,29) printf("%s\n",ii[2]) setcolor(0,32) printf("\tAvailable Versions:\t%s\n",vers[pkg]) if(installed){ printf("\tLast Installed Ver:\t") setcolor(7,34) printf("%s",install_arr[2]) setcolor(0,35) printf("(%s)\n",install_time) setcolor(0,32) } if(HOMEPAGE){ printf("\tHomepage:\t\t") clearcolor() printf("%s\n",HOMEPAGE) setcolor(0,32) } if(DESCRIPTION){ printf("\tDescription:\t\t") clearcolor() printf("%s\n",DESCRIPTION) setcolor(0,32) } printf("\tMatched Files:\t\t") clearcolor() printf("%s\n\n",files[pkg]) } }else{ print "No matches found." } exit } if(FLAG==1 && NF!=0){ T=1 split(vers[$1 "/" $2],vers_arr,/ /) for(i in vers_arr){ if(vers_arr[i]==$NF){ T=0 break } } if(T)vers[$1 "/" $2]=$NF " " vers[$1 "/" $2] T=1 split(files[$1 "/" $2],files_arr,/; /) for(i in files_arr){ if(files_arr[i]==($3 "/" $4)){ T=0 break } } if(T)files[$1 "/" $2]=$3 "/" $4 "; " files[$1 "/" $2] FOUND=1 } } function setcolor(a,b){ printf("%c[%d;%d;%dm",27,2,a,b) } function clearcolor(){ printf("%c[0m",27) } ' |

从图中看到的,其实 portagefilelist.de 的数据也是比较旧的,sys-process/dcron的版本还停留在 2.9 的年代,而本地安装的,早已经是 3.2 了.
脚本下载地址
TualatriX 在 2008年11月25日 17:18 说:【 】
骨头兄的脚本技术真是一流!学习了~哈哈!
I do not speak cn 在 2008年12月01日 02:27 说:【 】
http://www.portagefilelist.de/index.php/Special:PFLQuery2?file=host&group_file=on&searchfile=lookup&lookup=file&txt
bones7456 在 2008年12月02日 00:06 说:【 】
谢谢楼上的外国朋友~ 哈哈~~
liupingjing 在 2008年12月20日 18:16 说:【 】
骨头大虾,你上面的代码高亮是怎么实现的,WP-syntax? Coolcode?,不管哪个实现吧,关键是代码里的左尖括号还在,我贴代码的时候一保存就变成“&lt“了,显示出来也是”&lt“,一大片代码惨不忍睹,很郁闷的说,怎么才能让尖括号正常显示啊??
bones7456 在 2008年12月22日 09:39 说:【 】
@liupingjing: 我就用了 WP-syntax 啊~~
liupingjing 在 2008年12月22日 12:58 说:【 】
可能是你把WordPress升到2.7的缘故,呵呵,一会儿忽悠一叶升级去
bones7456 在 2008年12月22日 16:27 说:【 】
@liupingjing: 也有可能,不过还有可能是 WPMU 和 WP 的区别…