#!/bin/bash # QUERYPKG (Query installed packages on the system) # Copyright (c) 2007-2008 Pasi Korkalo # Poetic License # Copyright (c) 2005 Alexander E Genaud # This work 'as-is' we provide. # No warranty express or implied. # We've done our best, # to debug and test. # Liability for damages denied. # Permission is granted hereby, # to copy, share, and modify. # Use as is fit, # free or for profit. # These rights, on this notice, rely. # THE SCRIPT BEGINS: cd /var/log/packages FUNCTION=list PACKAGES=0 CALC=0 calcsize() { for PACKAGE in /var/log/packages/${1}*; do IFS=$'\x0A'$'\x0D' for SIZES in $(head -n 3 $PACKAGE 2> /dev/null | tail -n 2 2> /dev/null ); do if echo $SIZES | grep -q "^COMPRESSED PACKAGE SIZE:"; then COMPSIZE=$(expr $COMPSIZE + $(echo $SIZES | sed 's/COMPRESSED PACKAGE SIZE: *//;s/ K$//')) elif echo $SIZES | fgrep -q 'UNCOMPRESSED PACKAGE SIZE'; then UNCOMPSIZE=$(expr $UNCOMPSIZE + $(echo $SIZES | sed 's/UNCOMPRESSED PACKAGE SIZE: *//;s/ K$//')) fi done unset IFS done } for ARG in "$@"; do if echo $ARG | grep -q '^-'; then case $ARG in -i ) FUNCTION="info" ;; -w ) FUNCTION="whereis" ;; -f ) FUNCTION="files" ;; -h ) FUNCTION="help" ;; -t ) CALC=1 ;; * ) echo "Unknown argument: $ARG" && exit 1 esac else PATTERN=$ARG fi done case $FUNCTION in whereis ) grep $PATTERN * | fgrep -v ': ' | sort | uniq ;; help ) cat << EOF Usage: querypkg [options] [criteria|package_name] Querypkg is used to retrieve information about packages like this: querypkg xf_bin options: -t (calculate total size of listed packages) -i (show detailed information about matching packages) -f (show files in matching packages) -w (find packages with files matching the given criteria) -h (show usage information) Querypkg will automatically truncate package names from the end. EOF exit 0 ;; info ) for PACKINFO in $PATTERN*; do cat $PACKINFO 2> /dev/null | fgrep 'FILE LIST:' -B 20 | fgrep -v "FILE LIST:" echo [ $CALC -eq 1 ] && calcsize $PACKINFO done PACKAGES=$(ls /var/log/packages/$PATTERN* | wc -l) ;; files ) for PACKINFO in $PATTERN*; do echo "FILE LIST OF PACKAGE: $PACKINFO" cat $PACKINFO 2> /dev/null | fgrep 'FILE LIST:' -A 9999999 | fgrep -v "FILE LIST:" echo [ $CALC -eq 1 ] && calcsize $PACKINFO done PACKAGES=$(ls /var/log/packages/$PATTERN* | wc -l) ;; list ) for PACKINFO in $PATTERN*; do grep 'PACKAGE.*:' $PACKINFO 2> /dev/null | fgrep -v 'DESCRIPTION' | fgrep -v 'LOCATION' echo [ $CALC -eq 1 ] && calcsize $PACKINFO done PACKAGES=$(ls /var/log/packages/$PATTERN* 2> /dev/null | wc -l) ;; esac if [ "$FUNCTION" != "whereis" ]; then echo -n "TOTAL: $PACKAGES of $(ls /var/log/packages/* | wc -l) packages shown" [ $CALC -eq 1 ] && echo ", $COMPSIZE K compressed, $UNCOMPSIZE K uncompressed." || echo "." fi