LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2134|回复: 15

e-file 根据文件名查询gentoo包的脚本

[复制链接]
发表于 2008-11-20 15:16:07 | 显示全部楼层 |阅读模式
首发和以后更新都在我的blog: http://li2z.cn/category/e-file/


一直想在gentoo下实现一个类似ubuntu的apt-file的功能,幸好已经有 http://www.portagefilelist.de 这个网站了,就花了2小时写了个小脚本直接到这个站取数据了,感觉效果还可以,先发出来,算是预览版吧,以后会再完善的.
输出格式参考了 eix ,代码如下:
  1. #!/bin/sh
  2. #AUTHOR: bones7456 (bones7456<at>gmail<dot>com)
  3. #VERSION: 20081120
  4. ##License: GPL
  5. #e-file is like apt-file for gentoo, but data is online
  6. if [[ $# -ne 1 ]];then
  7.         echo "Usage: `basename $0` filename"
  8.         exit 1
  9. fi
  10. URL="http://www.portagefilelist.de/index.php/Special:PFLQuery2?file=$1&searchfile=lookup&lookup=file#result"
  11. w3m -dump -cols 3000 $URL | awk '
  12. BEGIN{
  13.         FLAG=0
  14.         FOUND=0
  15. }
  16. {
  17.         if($1=="dir" && $2=="package"){
  18.                 FLAG=1
  19.                 next
  20.         }
  21.         if($1=="Retrieved" && $2=="from"){
  22.                 if(FOUND){
  23.                         for(i in ver){
  24.                                 split(i,ii,/\//)
  25.                                 printf("%c[%d;%d;%dm* ",27,2,0,32)
  26.                                 printf("%c[0m%s/",27,ii[1])
  27.                                 printf("%c[%d;%d;%dm%s\n",27,2,1,29,ii[2])
  28.                                 printf("%c[%d;%d;%dm\t",27,2,0,32)
  29.                                 printf("Available versions:\t%s\n",ver[i])
  30.                                 printf("\tMatched File:\t\t")
  31.                                 printf("%c[0m",27)
  32.                                 printf("%s\n\n",file[i])
  33.                         }
  34.                 }else{
  35.                         print "No matches found."
  36.                 }
  37.                 exit
  38.         }
  39.         if(FLAG==1 && NF!=0){
  40.                 ver[$1 "/" $2]=$NF " " ver[$1 "/" $2]
  41.                 file[$1 "/" $2]=$3 "/" $4
  42.                 FOUND=1
  43.         }
  44. }'
复制代码
脚本下载地址: http://linuxfire.com.cn/~lily/e-file
截图如下:


=====20081125添加=====
ChangeLog:

    20081125:
    优化代码结构
    增加本地已安装版本的显示
    增加Homepage和Description的显示

http://li2z.cn/2008/11/25/e-file-20081125/

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2008-11-20 15:35:56 | 显示全部楼层
Good work! Thanks.
回复 支持 反对

使用道具 举报

发表于 2008-11-20 16:24:05 | 显示全部楼层
不错阿
发到forums.gentoo.org
说不定会有别人帮你改进,帮你提建议
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-20 16:51:48 | 显示全部楼层
呵呵,我先把自己想到的实现了,再发上去吧,这个发上去太简陋了点吧...
回复 支持 反对

使用道具 举报

发表于 2008-11-20 17:44:00 | 显示全部楼层
cool!!这个找了好久了,谢谢楼主。打个包放到gentoo-china里,嘿嘿
回复 支持 反对

使用道具 举报

发表于 2008-11-20 18:42:15 | 显示全部楼层
赞~~~

现在还差一个
查中文USE的。。。期待大牛出手

查中文USE跟您这个有点类似。搭建一个人人可以编辑的WIKI,上面可以查USE对应的中文含义和作用。
回复 支持 反对

使用道具 举报

发表于 2008-11-20 18:49:30 | 显示全部楼层
另外,建议起个好名字

比如 efile 或者 e_file


用 curl /lynx/links 代替 w3m,或者都兼容
回复 支持 反对

使用道具 举报

发表于 2008-11-20 19:24:14 | 显示全部楼层
ebuild,不知能不能用? e-file-0.1.ebuild (需要个版本号。)
  1. # Copyright 1999-2008 Gentoo Foundation
  2. # Distributed under the terms of the GNU General Public License v2
  3. # $Header: $
  4. DESCRIPTION="e-file is like apt-file for gentoo, but data is online"
  5. HOMEPAGE="http://li2z.cn/2008/11/20/e-file"
  6. SRC_URI="http://linuxfire.com.cn/~lily/${PN}"
  7. LICENSE="GPL-2"
  8. SLOT="0"
  9. KEYWORDS="~x86"
  10. IUSE=""
  11. DEPEND=""
  12. RDEPEND="www-client/w3m"
  13. S=${WORKDIR}
  14. src_unpack() {
  15.         cp "${DISTDIR}"/e-file .
  16. }
  17. src_install() {
  18.         dobin ${PN}
  19. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2008-11-21 00:59:49 | 显示全部楼层
bones兄,这个脚本在处理vsftpd这样的文件时似乎还有些问题
第一问题是在可用版本中会出现重复的版本号
第二问题是根据http://www.portagefilelist.de/index.php/SpecialFLQuery2?file=vsftpd&searchfile=lookup&lookup=file#result的搜索情况,vsftpd应该匹配net-ftp/vsftpd包中的
/etc/conf.d/vsftpd
/etc/init.d/vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/xinetd.d/vsftpd
/usr/sbin/vsftpd
但目前的脚本中只匹配最后一个

我对awk一知半解,没有什么好的主意,等其他兄弟发言。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-25 14:04:05 | 显示全部楼层
Post by 牙刷;1911378
bones兄,这个脚本在处理vsftpd这样的文件时似乎还有些问题
第一问题是在可用版本中会出现重复的版本号
第二问题是根据http://www.portagefilelist.de/index.php/SpecialFLQuery2?file=vsftpd&searchfile=lookup&lookup=file#result的搜索情况,vsftpd应该匹配net-ftp/vsftpd包中的
/etc/conf.d/vsftpd
/etc/init.d/vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/xinetd.d/vsftpd
/usr/sbin/vsftpd
但目前的脚本中只匹配最后一个

我对awk一知半解,没有什么好的主意,等其他兄弟发言。。。


谢谢牙刷,新版本的脚本已经解决了此问题~
见: http://li2z.cn/2008/11/25/e-file-20081125/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表