diff --git a/src/bee-query.sh.in b/src/bee-query.sh.in index ad4313f..040a0a4 100644 --- a/src/bee-query.sh.in +++ b/src/bee-query.sh.in @@ -32,6 +32,9 @@ VERSION=${BEE_VERSION} : ${BEE_BINDIR:=@BINDIR@} : ${BEE_LIBEXECDIR:=@LIBEXECDIR@} +: ${BEEFLOCK=${BEE_BINDIR}/beeflock} +: ${BEECACHE_CACHEDIR=${BEE_CACHEDIR}/bee-cache} +: ${BEECACHE_INVENTORY=${BEECACHE_CACHEDIR}/INVENTORY} function bee-list() { ${BEE_LIBEXECDIR}/bee/bee.d/bee-list "${@}" @@ -81,18 +84,22 @@ function get_files() { } function get_pkgs() { - f=$1 - - for pkg in $(bee-list --installed) ; do - - if egrep -q "file=.*${f}" "${BEE_METADIR}/${pkg}/CONTENT" ; then - echo ${pkg} - while read line ; do - eval $(${BEESEP} "${line}") - echo " ${file}" - done < <(egrep "file=.*${f}" "${BEE_METADIR}/${pkg}/CONTENT") - fi - done + file_pattern="$1" + last_pkg='' + + ${BEEFLOCK} --shared ${BEECACHE_INVENTORY} \ + ${BEE_LIBEXECDIR}/bee/beeindextr ${BEECACHE_INVENTORY} | \ + grep -- "$file_pattern" | \ + sort | \ + while read -r pkg mtime uid gid mode size md5 filename; do + if [[ $filename =~ $file_pattern ]]; then + if [ "$pkg" != "$last_pkg" ]; then + echo $pkg + last_pkg="$pkg" + fi + echo " " $filename + fi + done }