Codice: Seleziona tutto
#!/bin/sh
#
# Copyright 2008 Cavalleri Massimo and Luca Cireddu (luca@lucacireddu.it)
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# Last mods:
# 1. New -a option
# 2. Removing of temp count file
# 3. New queries system
# 4. Added Colors
#
ADM_DIR="$ROOT/var/log"
VER="0.4beta"
echo_help() {
echo "Find installed or removed packages with a string"
echo "Usage: $(basename $0) [ options ] string"
echo "es. $(basename $0) kde"
echo ""
echo "If you add follow options:"
echo "-a | --advanced ---> Advanced output"
echo "-F | --with-file ---> search on database the packages that include this"
echo " in your entry"
echo "-L | --last ---> print last package install or removed"
echo "-r | --removed ---> search on database of removed packages"
echo "-c | --color ---> Colored output"
echo "-h | --help ---> Show this help"
echo ""
}
get_info_pkg() {
# $1 package full name
PKG_FULL_NAME="$1"
UNCOMPRESSED_PACKAGE_SIZE="$(cat $ADM_DIR/${REMOVED}packages/$PKG_FULL_NAME | \
grep "UNCOMPRESSED PACKAGE SIZE" | cut -d":" -f2 | awk -F" " '{print $1}')"
PKG_DATE="$(ls -l $ADM_DIR/${REMOVED}packages/$PKG_FULL_NAME | cut -d" " -f6)"
echo "$(echo $PKG_FULL_NAME | cut -d"-" -f -4) $PKG_DATE ${UNCOMPRESSED_PACKAGE_SIZE}K"
}
if [ $# = 0 ]; then
echo_help
exit
fi
COUNTER=$#
QUERIES=""
COLORED=""
while [ $COUNTER -gt 0 ]; do
case "$1" in
-H | -h | --help)
echo_help
exit
;;
-F | --with-file)
case "$2" in
-v | --version)
echo "$(basename $0) version $VER"
exit
;;
-*)
echo_help
exit
;;
*)
FDB="$2"
ADVANCED="1"
shift 2
;;
esac
;;
-L | --last)
shift
LAST="1"
ADVANCED="1"
;;
-v | --version)
echo "$(basename $0) version $VER"
exit
;;
-a | --advanced)
ADVANCED="1"
shift
;;
-c | --color)
COLORED="--color"
shift
;;
-r | --removed)
REMOVED="removed_"
ADVANCED="1"
shift
;;
*)
QUERIES="$QUERIES $1"
shift
;;
esac
let COUNTER=$COUNTER-1
done
if [ -z $ADVANCED ]; then
for ITEM in $QUERIES; do
if [ -z $COLORED ]; then
find $ADM_DIR/${REMOVED}packages/ -name "*$ITEM*" | cut -d/ -f5
else
find $ADM_DIR/${REMOVED}packages/ -name "*$ITEM*" | cut -d/ -f5 | grep $COLORED $ITEM
fi
done
else
(
echo "[Package] [Date] [SizeOnDisk]"
echo
if [ -z $FDB ] && [ -z $LAST ]; then
ITEM=$(echo $QUERIES | cut -d" " -f1)
PACKAGES_ITEM="$(find $ADM_DIR/${REMOVED}packages/ -name "*$ITEM*" -exec basename {} \; | grep -E "^.+\-.+\-.+\-.+$")"
COUNT_PACKAGES=$(echo "$PACKAGES_ITEM" | wc --words)
for PKG_FULL_NAME in $PACKAGES_ITEM; do
get_info_pkg $PKG_FULL_NAME
done
elif [ ! -z $FDB ] && [ -z $LAST ]; then
PACKAGES=$(ls $ADM_DIR/${REMOVED}packages/ | grep -E "^.+\-.+\-.+\-.+$")
COUNT_PACKAGES=0
for PKG_FULL_NAME in $PACKAGES; do
if [ ! -z "$(cat $ADM_DIR/${REMOVED}packages/$PKG_FULL_NAME | grep $FDB)" ] || \
[ ! -z "$(cat $ADM_DIR/${REMOVED}scripts/$PKG_FULL_NAME 2> /dev/null | \
sed -n 's,^( *cd \([^ ;][^ ;]*\) *; *rm -rf \([^ )][^ )]*\) *) *$,\1/\2,p' | grep $FDB)" ]; then
get_info_pkg $PKG_FULL_NAME
let "COUNT_PACKAGES+=1"
fi
done
elif [ ! -z $LAST ]; then
get_info_pkg $(ls -t $ADM_DIR/${REMOVED}packages/ | grep -E "^.+\-.+\-.+\-.+$" | head -n 1)
fi
echo $COUNT_PACKAGES > /tmp/findpkg_count
) | column -t -c 3
if [ -z $LAST ]; then
echo "$(cat /tmp/findpkg_count 2>/dev/null) match found."
rm /tmp/findpkg_count
fi
exit 0
fi
Codice: Seleziona tutto
sardylan@achille:~$ ./find libc xorg
glibc-profile-2.7-i486-10
libcaca-0.99.beta11-i486-1
glibc-zoneinfo-2.7-noarch-10
libcdio-0.79-i486-1
glibc-solibs-2.7-i486-10
glibc-2.7-i486-10
libcmml-0.9.2-i486-3as
libcddb-1.3.0-i486-1
glibc-i18n-2.7-noarch-10
xorg-cf-files-1.0.2-noarch-1
xorg-server-1.4.0.90-i486-1
xorg-sgml-doctools-1.2-noarch-1
xorg-docs-1.4-noarch-1
xorg-server-xnest-1.4.0.90-i486-1
xorg-server-xvfb-1.4.0.90-i486-1
Codice: Seleziona tutto
sardylan@achille:~$ ./find libc -a xorg
[Package] [Date] [SizeOnDisk]
glibc-profile-2.7-i486 2008-08-15 4150K
libcaca-0.99.beta11-i486-1 2008-08-15 2170K
glibc-zoneinfo-2.7-noarch 2008-08-15 3040K
libcdio-0.79-i486-1 2008-08-15 1060K
glibc-solibs-2.7-i486 2008-08-15 9730K
glibc-2.7-i486-10 2008-08-15 111430K
libcmml-0.9.2-i486-3as 2008-08-31 1170K
libcddb-1.3.0-i486-1 2008-08-15 300K
glibc-i18n-2.7-noarch 2008-08-15 89490K
9 match found.
sardylan@achille:~$
Con la visualizzazione avanzata viene cercato soltanto la prima voce...
Dovrebbe funzionare tutto...
Edit:: Ho aggiunto i colori
Edit2:: Ho postato la vers. sbagliata dello script... Ora è corretto