--- /dev/null
+#!/bin/sh
+
+# zpm-list [-s status] [-vn] [ -f pkgfile ] [pkgid ...]
+
+verbose=0
+nameonly=0
+latestonly=1
+
+while getopts :s:f:vnIF: opt; do
+ case $opt in
+ f) pkgfile="$OPTARG" ;;
+ s) status="$OPTARG" ;;
+ I) status=installed ;;
+ v) verbose=1 ;;
+ n) nameonly=1 ;;
+ a) latestonly=0 ;;
+ F) filter="$OPTARG" ;;
+ esac
+done
+shift $(( OPTIND - 1))
+
+: ${pkgfile:=${ZPMDB:-/var/lib/zpm/local.db}}
+
+if [ -z "$pkgfile" ]; then
+ echo "must specify package file"
+ exit 1
+fi
+
+if [ $nameonly -eq 0 ]; then
+ cols="pkgid"
+else
+ cols="package"
+fi
+
+if [ $verbose -eq 1 ]; then
+ cols="$cols,coalesce(status,'-')"
+fi
+
+if [ -n "$status" ]; then
+ status=$(zpm quote "$status")
+ where="and status = '$status'"
+fi
+
+if [ -n "$filter" ]; then
+ where="$where and ($filter)"
+fi
+
+pkgid=$1
+
+if [ -n "$pkgid" ]; then
+ eval $(zpm parse -E "$pkgid")
+ if [ -n "$name" ]; then
+ package=$(zpm quote "$name")
+ where="$where and package = '$package'"
+ fi
+ if [ -n "$version" ]; then
+ version=$(zpm quote "$version")
+ where="$where and version = '$version'"
+ fi
+ if [ -n "$release" ]; then
+ release=$(zpm quote "$release")
+ where="$where and release = '$release'"
+ fi
+fi
+
+zpm shell $pkgfile <<EOS
+.separator "\t"
+select $cols from packages_pkgid where true $where
+;
+EOS
+
+if [ $? -ne 0 ]; then
+ echo "select $cols from packages_pkgid where true $where" 1>&2
+fi