+ -
当前位置:首页 → 问答吧 → 比pkgfile快N倍的脚本

比pkgfile快N倍的脚本

时间:2010-02-23

来源:互联网

前几天用pkgfile来频繁查找哪些包提供XX文件。实在是觉得pkgfile的效率慢得可怕,很疑惑它为啥把files列表分散开来。于是写了一个脚本,把files列表整合在一起,能够快N倍地进行查找。
PHP 代码:
#!/bin/bash
#file: ~/pfile

config=/etc/pacman.conf
cache=/var/cache/pkgtools/lists
list=/var/tmp/pkgfilelists.gz
repos=$(sed -n 's/^\[\(.*\)\]/\1/p' $config | grep -v options)

help(){
    echo "Usage:"
    echo "      $0 {--help|--update|FILE}"
    echo 
    echo "This is a script to fast find a package contains FILE (regexp)."
    echo "For first use, please run:"
    echo "      pkgfile --update"
    echo "Then:"
    echo "      $0 --update"
}

update(){
    mv -f "$list" "$list.old" &>/dev/null
    for repo in $repos; do
        cd "$cache/$repo" 2>/dev/null
        [ $? -ne 0 ] && continue
        echo "listing [$repo] ($(ls | wc -l) packages) ..."
        for i in *; do
            name="$repo/${i%-*-*}"
            grep -v '%FILES%' "$i/files" | sed "s|^|$name: |" | gzip  >> ${list}
        done
    done
}

if [ $# -eq 0 ]; then
    help
    exit 0
fi

case "$1" in
    -u|--update)
        update
        ;;
    -h|--help)
        help
        ;;
    *)
        zgrep "$1" "$list"
        ;;
esac 
用法很简单,首先用原装正版的pkgfile下载文件列表,然后运行这个脚本更新,接着就可以查找了。
PHP 代码:
20:42:06@laptop:~ $ sudo pkgfile --update
Updating [core] file list... Extracting [core] file list... Done
Updating [extra] file list... Extracting [extra] file list... Done
Updating [community] file list... Extracting [community] file list... Done
Updating [arch-games] file list... Extracting [arch-games] file list... Done
20:43:28@laptop:~ $ pfile --update
listing [core] (184 packages) ...
listing [extra] (2458 packages) ...
listing [community] (1915 packages) ...
listing [arch-games] (166 packages) ... 
一个查找的花费时间的对比:
PHP 代码:
20:44:39@laptop:~ $ time pkgfile tunctl
extra/uml_utilities

real    0m8.741s
user    0m8.119s
sys     0m0.143s
20:45:33@laptop:~ $ time pfile tunctl
extra/uml_utilities: usr/bin/tunctl
extra/vde2: usr/share/man/man8/vde_tunctl.8.gz
extra/vde2: usr/sbin/vde_tunctl
extra/vde2: usr/bin/vde_tunctl

real    0m0.941s
user    0m0.853s
sys     0m0.020s 

作者: dickeny   发布时间: 2010-02-23

不错,但目前没这个需要,先Mark下。

作者: luyaotang   发布时间: 2010-02-23

pkgfile是干什么用的?

作者: wolfmei   发布时间: 2010-02-23

没有试过pkgfile(完全不需要...)

不过我猜测只有(开机后)第一次运行`pkgfile <file>` 会比较慢, 之后你再用它查找就不会那么慢了; 这个跟pacman的表现是一样的.

你的`pfile --update`花的时间大概跟这个第一次运行的时间差不多.

作者: lolilolicon   发布时间: 2010-02-23

热门下载

更多