findpkg
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
- puzuma
- Linux 2.x

- Messaggi: 482
- Iscritto il: mar 4 lug 2006, 17:14
- Nome Cognome: Stefano Salvador
- Slackware: current
- Kernel: 2.6.32.2
- Desktop: KDE 4.4.0
- Località: Udine
- Contatta:
Re: findpkg
@spina
scusa, mi ero perso la parte in cui spiegavi che toglievi tutti i rami non utilizzati.
Offtopic: Da questo punto di vista c'è in effetti parecchio da lavorare negli script di boot della slackware. Sono sempre invidioso di vedere la OpenSuse metterci circa 15 secondi a fare il boot (grafico) senza nessuna ottimizzazione.
scusa, mi ero perso la parte in cui spiegavi che toglievi tutti i rami non utilizzati.
Offtopic: Da questo punto di vista c'è in effetti parecchio da lavorare negli script di boot della slackware. Sono sempre invidioso di vedere la OpenSuse metterci circa 15 secondi a fare il boot (grafico) senza nessuna ottimizzazione.
The quiet ones are the ones who change the world. The loud ones only take the credit.
- Blizzard
- Master

- Messaggi: 1509
- Iscritto il: mar 2 gen 2007, 22:53
- Nome Cognome: Giovanni Santostefano
- Slackware: 12.2
- Kernel: 2.6.27.7-smp
- Desktop: Fluxbox
- Contatta:
Re: findpkg
ciao,
avevo fatto un'uscita un po tagliente e pignola ma effettivamente a leggere spina devo ricredermi sul "pignola".
Effettivamente i commenti restano tutti su findpkg ma ad esempio qualche ritocchino di personalizzazione agli script di boot si potrebbe fare
@Mario: sarei felicissimo di vedere il tuo script! se non leggi questo messaggio ti contatto in privato come suggeritomi.
A parte questo è venuta anche a me la voglia di fare un eliminatore di commenti da script sh
Solo che ho fatto un lexer; ve lo posto
per utilizzarlo
provatelo
Gio
avevo fatto un'uscita un po tagliente e pignola ma effettivamente a leggere spina devo ricredermi sul "pignola".
Effettivamente i commenti restano tutti su findpkg ma ad esempio qualche ritocchino di personalizzazione agli script di boot si potrebbe fare
@Mario: sarei felicissimo di vedere il tuo script! se non leggi questo messaggio ti contatto in privato come suggeritomi.
A parte questo è venuta anche a me la voglia di fare un eliminatore di commenti da script sh
Solo che ho fatto un lexer; ve lo posto
Codice: Seleziona tutto
%%
/*sh comment removal by Giovanni Santostefano*/
^([ \t])*"#"/"!"(.)*\n ECHO;
^([ \t])*"$"/"#"(.)*\n ECHO;
^([ \t])*"#"(.)*\n {}
(.)*\n ECHO;
%%
int yywrap(void)
{
return 1;
}
int main(int argc, char *argv[])
{
fprintf(stderr,"RmComment a sh script comment removal\n");
fprintf(stderr,"by Giovanni Santostefano\n\n");
if(argc<2)
{
fprintf(stderr,"Usage: rmcomment file.c");
return;
}
yyin=fopen(argv[1],"r");
if(!yyin)
{
fprintf(stderr, "Could not open: %s", argv[1]);
}
yylex();
fclose(yyin);
}Codice: Seleziona tutto
bash-3.1$ lex decomment.l
bash-3.1$ gcc -o rmcomment lex.yy.c
bash-3.1$ ./rmcomment findpkg > fpkg
RmComment a sh script comment removal
by Giovanni Santostefano
bash-3.1$ wc -l f*
161 findpkg
133 fpkg
294 total
bash-3.1$
Gio
- absinthe
- Iper Master

- Messaggi: 2354
- Iscritto il: dom 15 mag 2005, 0:00
- Nome Cognome: Matteo Nunziati
- Slackware: 12.1 - defunct
- Kernel: 2.6.32-5-amd64
- Desktop: gnome
- Distribuzione: debian squeeze
- Località: Prato
- Contatta:
Re: findpkg
riguardo a questa storia dei commenti: scrivete tutto codice interpretabile con ash così gira con tutte le shell e potete cambiare di volta in volta. poi installate la korn shell come shell di sistema e fatele generare il bytecode (sì come java) e provate a vedere cosa cambia agli script di avvio... mai provato ma sarei curioso.
M
M
-
Mario Vanoni
- Iper Master

- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: findpkg
ash(1) non e` bash(1) che (quasi) tutti usano,absinthe ha scritto:riguardo a questa storia dei commenti: scrivete tutto codice interpretabile con ash così gira con tutte le shell e potete cambiare di volta in volta. poi installate la korn shell come shell di sistema e fatele generare il bytecode (sì come java) e provate a vedere cosa cambia agli script di avvio... mai provato ma sarei curioso.
M
$(cmd) lo mangia, ma la [t]csh no!
Non esiste regola quale shell sia shell di sistema,
per difetto (default) e` la bash, ma non certo.
Camminare sul lago con 1 cm di ghiacco?
- absinthe
- Iper Master

- Messaggi: 2354
- Iscritto il: dom 15 mag 2005, 0:00
- Nome Cognome: Matteo Nunziati
- Slackware: 12.1 - defunct
- Kernel: 2.6.32-5-amd64
- Desktop: gnome
- Distribuzione: debian squeeze
- Località: Prato
- Contatta:
Re: findpkg
Offtopic: non ho provato tutte le shell in vita mia, però credevo che ciò che fosse scritto in ash fosse anche compatibile con le varie sh. ad ogni modo io dicevo di processare un file con ash per essere sicuro che fosse digeribile almeno da bash e korn, poi di farlo girare su una korn shell generando il bytecode, per vedere che tempi impiegava.Mario Vanoni ha scritto: ash(1) non e` bash(1) che (quasi) tutti usano,
$(cmd) lo mangia, ma la [t]csh no!
sinceramente non ho mai avuto problemi di lentezza per via dei commenti su pc moderni, comunque se uno è curioso può provare a vedere cosa guadagna tra bytecode e interpretazione nuda e cruda.
spiego meglio:Non esiste regola quale shell sia shell di sistema,
per difetto (default) e` la bash, ma non certo.
1- rendi uno script ash-compliant
2- installi la korn shell, la ash e (se non ce l'hai la bash)
3- fai puntare /bin/sh a korn
4- generi il bytecode degli script di avvio e vedi che succede
5- fai puntare /bin/sh a bash
6- fai girare la stessa roba su bash e vedi che succede
7- fai puntare /bin/sh a ash
8- fai girare la stessa roba su ash e vedi che succede
preciso che _non_ intendevo sostituire in blocco la shell di default ma solo suggerire la korn come prova per chi era incuriosito dalla velocità di esecuzione degli script.
Offtopic: odio la neve, il ghiaccio, la sabbia e il mare.Camminare sul lago con 1 cm di ghiacco?
M
Ultima modifica di absinthe il lun 8 set 2008, 11:34, modificato 1 volta in totale.
- conraid
- Staff

- Messaggi: 13631
- Iscritto il: gio 14 lug 2005, 0:00
- Nome Cognome: Corrado Franco
- Slackware: current64
- Desktop: kde
- Località: Livorno
- Contatta:
Re: findpkg
Finalmente qualcuno con i miei "gusti"absinthe ha scritto: odio la neve, il ghiaccio, la sabbia e il mare.
- submax82
- Staff

- Messaggi: 3202
- Iscritto il: mer 31 ago 2005, 0:00
- Desktop: xfce
- Distribuzione: SalixOS
- Contatta:
Re: findpkg
@sardylan
nella 0.4beta c'è un bug notevole... colpa mia e alcune cose da sistemare e aggiustare... appena ho finito di sistemarla la posto, altre due cose: il tool si chiama findpkg (non solo find) per rispettare lo schema slackware nel dare i nome dei pkgtools, i commenti e changelog lo lasciamo commentato nello script come fà sempre Pat anche se perdiamo 0.00030 sec
.
Nella ricerca con find è meglio usare basename o sed anche se sono più lenti questo perchè il cut non và bene visto che l'opzione -f dipende da ADM_DIR...
a breve posto la 0.5beta con gli aggiustamenti
nella 0.4beta c'è un bug notevole... colpa mia e alcune cose da sistemare e aggiustare... appena ho finito di sistemarla la posto, altre due cose: il tool si chiama findpkg (non solo find) per rispettare lo schema slackware nel dare i nome dei pkgtools, i commenti e changelog lo lasciamo commentato nello script come fà sempre Pat anche se perdiamo 0.00030 sec
Nella ricerca con find è meglio usare basename o sed anche se sono più lenti questo perchè il cut non và bene visto che l'opzione -f dipende da ADM_DIR...
a breve posto la 0.5beta con gli aggiustamenti
-
Mario Vanoni
- Iper Master

- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: findpkg
Di quale ksh parli?absinthe ha scritto: preciso che _non_ intendevo sostituire in blocco la shell di default ma solo suggerire la korn come prova per chi era incuriosito dalla velocità di esecuzione degli script.
pdksh (public domain)
ksh93 (AT&T)
- absinthe
- Iper Master

- Messaggi: 2354
- Iscritto il: dom 15 mag 2005, 0:00
- Nome Cognome: Matteo Nunziati
- Slackware: 12.1 - defunct
- Kernel: 2.6.32-5-amd64
- Desktop: gnome
- Distribuzione: debian squeeze
- Località: Prato
- Contatta:
Re: findpkg
scusa, hai ragione! non ricordavo nemmeno l'esistenza della pdksh! parlavo della ksh93, che dal 2000 è rilasciata anche sotto forma di sorgenti con licenza Common Public 1.0Mario Vanoni ha scritto:Di quale ksh parli?absinthe ha scritto: preciso che _non_ intendevo sostituire in blocco la shell di default ma solo suggerire la korn come prova per chi era incuriosito dalla velocità di esecuzione degli script.
pdksh (public domain)
ksh93 (AT&T)
M
-
Mario Vanoni
- Iper Master

- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: findpkg
Per questo il mondo DEBIAN usa solo pdksh, licenza non compatible GPL!absinthe ha scritto:scusa, hai ragione! non ricordavo nemmeno l'esistenza della pdksh! parlavo della ksh93, che dal 2000 è rilasciata anche sotto forma di sorgenti con licenza Common Public 1.0Mario Vanoni ha scritto:Di quale ksh parli?absinthe ha scritto: preciso che _non_ intendevo sostituire in blocco la shell di default ma solo suggerire la korn come prova per chi era incuriosito dalla velocità di esecuzione degli script.
pdksh (public domain)
ksh93 (AT&T)
M
- submax82
- Staff

- Messaggi: 3202
- Iscritto il: mer 31 ago 2005, 0:00
- Desktop: xfce
- Distribuzione: SalixOS
- Contatta:
Re: findpkg
ecco la nuova versione 0.5
funzia tutto tranne i colori ... almeno così sembra 
è reso tutto più leggibile usando le funzioni... risolti alcuni bug e rimesso "basename" perchè è meglio visto che con un cut dipende dal valore di ADM_DIR quindi è la scelta migliore anche se si paga in termini di prestazioni.
Codice: Seleziona tutto
#!/bin/sh
#
# ============================= FINDPKG Tool ===================================
#
# Copyright 2008 Cavalleri Massimo (submax@tiscalinet.it)
# and Cireddu Luca (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.
#
# ___ changelog ___
#
# 0.5beta:
# fix bug get_info_pkg and set size on zero for removed packages
# rewrite with functions, tmp dir, tmp files from user
#
# 0.4beta:
# 1. New -a option
# 2. Removing of temp count file
# 3. New queries system
# 4. Added Colors
#
# 0.3beta:
# add search on removed packages
#
# 0.1beta and 0.2beta are initial versions
#
ADM_DIR="$ROOT/var/log"
TMP="$ROOT/tmp"
VER="0.5beta"
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)"
if [ -z $REMOVED ]; then
echo "$PKG_FULL_NAME $PKG_DATE ${UNCOMPRESSED_PACKAGE_SIZE}K"
else
echo "$(echo $PKG_FULL_NAME | sed 's/\-upgraded.*//g') $PKG_DATE 0K"
fi
}
get_search_items() {
COUNT_PACKAGES=0
for ITEM in $QUERIES; do
if [ ! -z $ADVANCED ]; then
PACKAGES_ITEM="$(find $ADM_DIR/${REMOVED}packages/ -name "*$ITEM*" -exec basename {} \; | grep -E "^.+\-.+\-.+\-.+$")"
let COUNT_PACKAGES=$COUNT_PACKAGES+$(echo "$PACKAGES_ITEM" | wc --words)
for PKG_FULL_NAME in $PACKAGES_ITEM; do
get_info_pkg $PKG_FULL_NAME
done
else
if [ -z $COLORED ]; then
find $ADM_DIR/${REMOVED}packages/ -name "*$ITEM*" -exec basename {} \; | grep -E "^.+\-.+\-.+\-.+$" | sed 's/\-upgraded.*//g'
else
find $ADM_DIR/${REMOVED}packages/ -name "*$ITEM*" -exec basename {} \; | grep -E "^.+\-.+\-.+\-.+$" | sed 's/\-upgraded.*//g' | grep $COLORED $ITEM
fi
fi
done
return $COUNT_PACKAGES
}
get_search_with_file() {
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
if [ ! -z $ADVANCED ]; then
get_info_pkg $PKG_FULL_NAME
let COUNT_PACKAGES+=1
else
echo $PKG_FULL_NAME | sed 's/\-upgraded.*//g'
fi
fi
done
return $COUNT_PACKAGES
}
get_search_last() {
if [ ! -z $ADVANCED ]; then
get_info_pkg $(ls -t $ADM_DIR/${REMOVED}packages/ | grep -E "^.+\-.+\-.+\-.+$" | head -n 1)
else
ls -t $ADM_DIR/${REMOVED}packages/ | grep -E "^.+\-.+\-.+\-.+$" | head -n 1 | sed 's/\-upgraded.*//g'
fi
}
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"
shift 2
;;
esac
;;
-L | --last)
shift
LAST="1"
;;
-v | --version)
echo "$(basename $0) version $VER"
exit
;;
-a | --advanced)
ADVANCED="1"
shift
;;
-c | --color)
COLORED="--color"
shift
;;
-r | --removed)
REMOVED="removed_"
shift
;;
*)
QUERIES="$QUERIES $1"
shift
;;
esac
let COUNTER=$COUNTER-1
done
#MAIN
(if [ -z $FDB ] && [ -z $LAST ]; then
get_search_items
elif [ ! -z $FDB ] && [ -z $LAST ]; then
get_search_with_file
elif [ -z $FDB ] && [ ! -z $LAST ]; then
get_search_last
fi) > $TMP/findpkg_out$$
GETC=$?
echo $GETC > $TMP/findpkg_count$$
if [ ! -z $ADVANCED ]; then
(
echo "[Package] [Date] [SizeOnDisk]"
echo
cat $TMP/findpkg_out$$
) | column -t -c 3
if [ -z $LAST ]; then
echo "$(cat $TMP/findpkg_count$$ 2>/dev/null) match found."
rm -f $TMP/findpkg_count$$
fi
else
cat $TMP/findpkg_out$$
fi
rm -f $TMP/findpkg_out$$
exit 0è reso tutto più leggibile usando le funzioni... risolti alcuni bug e rimesso "basename" perchè è meglio visto che con un cut dipende dal valore di ADM_DIR quindi è la scelta migliore anche se si paga in termini di prestazioni.
- sardylan
- Linux 3.x

- Messaggi: 993
- Iscritto il: mar 24 apr 2007, 9:21
- Nome Cognome: Luca Cireddu
- Slackware: current 64bits
- Kernel: 3.16
- Desktop: KDE 4.14
- Distribuzione: Debian - CLFS
- Località: Cagliari
- Contatta:
Re: findpkg
submax, i colori andavano soltanto nella versione semplice...
In quella avanzata tutto l'output passa per column e quindi si perde tutto...
Almeno così nella vecchia...
Io ho visto poco in questo periodo, ma ho delle cosettine da mettere a posto che mi hanno consigliato... Le vedo direttamente sulla nuova versione...
In quella avanzata tutto l'output passa per column e quindi si perde tutto...
Almeno così nella vecchia...
Io ho visto poco in questo periodo, ma ho delle cosettine da mettere a posto che mi hanno consigliato... Le vedo direttamente sulla nuova versione...
- submax82
- Staff

- Messaggi: 3202
- Iscritto il: mer 31 ago 2005, 0:00
- Desktop: xfce
- Distribuzione: SalixOS
- Contatta:
Re: findpkg
nuova versione, i colori ora funziano, inoltre ho sistemato le cose per comandi tipo:
eccola, versione 0.6beta2
magari alcune cose che volevi sistemare lo sono già... booo prova a darci un occhio 
Codice: Seleziona tutto
findpkg server kde -a
findpkg server -F soffice -a
findpkg server -F libxmms
findpkg xorg server
Codice: Seleziona tutto
#!/bin/sh
#
# ============================= FINDPKG Tool ===================================
#
# Copyright 2008 Cavalleri Massimo (submax@tiscalinet.it)
# and Cireddu Luca (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.
#
# ___ changelog ___
#
# 0.6beta2:
# delete duplicate, consecutive or nonconsecutive lines from result
# on multiple search
#
# 0.6beta:
# fix color and result for multiple search
#
# 0.5beta:
# fix bug get_info_pkg and set size on zero for removed packages
# rewrite with functions, tmp dir, tmp files from user
#
# 0.4beta:
# 1. New -a option
# 2. Removing of temp count file
# 3. New queries system
# 4. Added Colors
#
# 0.3beta:
# add search on removed packages
#
# 0.1beta and 0.2beta are initial versions
#
ADM_DIR="$ROOT/var/log"
TMP="$ROOT/tmp"
VER="0.6beta2"
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)"
if [ -z $REMOVED ]; then
echo "$PKG_FULL_NAME $PKG_DATE ${UNCOMPRESSED_PACKAGE_SIZE}K"
else
echo "$(echo $PKG_FULL_NAME | sed 's/\-upgraded.*//g') $PKG_DATE ~0K"
fi
}
get_search_items() {
COUNT_PACKAGES=0
for ITEM in $QUERIES; do
if [ ! -z $ADVANCED ]; then
PACKAGES_ITEM="$(find $ADM_DIR/${REMOVED}packages/ -name "*$ITEM*" -exec basename {} \; | grep -E "^.+\-.+\-.+\-.+$")"
let COUNT_PACKAGES=$COUNT_PACKAGES+$(echo "$PACKAGES_ITEM" | wc --words)
for PKG_FULL_NAME in $PACKAGES_ITEM; do
get_info_pkg $PKG_FULL_NAME
done
else
find $ADM_DIR/${REMOVED}packages/ -name "*$ITEM*" -exec basename {} \; | grep -E "^.+\-.+\-.+\-.+$" | sed 's/\-upgraded.*//g'
fi
done
return $COUNT_PACKAGES
}
get_search_with_file() {
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
if [ ! -z $ADVANCED ]; then
get_info_pkg $PKG_FULL_NAME
let COUNT_PACKAGES+=1
else
echo $PKG_FULL_NAME | sed 's/\-upgraded.*//g'
fi
fi
done
return $COUNT_PACKAGES
}
get_search_last() {
if [ ! -z $ADVANCED ]; then
get_info_pkg $(ls -t $ADM_DIR/${REMOVED}packages/ | grep -E "^.+\-.+\-.+\-.+$" | head -n 1)
else
ls -t $ADM_DIR/${REMOVED}packages/ | grep -E "^.+\-.+\-.+\-.+$" | head -n 1 | sed 's/\-upgraded.*//g'
fi
}
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"
shift 2
;;
esac
;;
-L | --last)
shift
LAST="1"
;;
-v | --version)
echo "$(basename $0) version $VER"
exit
;;
-a | --advanced)
ADVANCED="1"
shift
;;
-c | --color)
COLORED="--color"
shift
;;
-r | --removed)
REMOVED="removed_"
shift
;;
*)
QUERIES="$QUERIES $1"
shift
;;
esac
let COUNTER=$COUNTER-1
done
#MAIN
(if [ ! -z "$QUERIES" ]; then
get_search_items
fi
if [ ! -z "$FDB" ]; then
get_search_with_file
fi
if [ ! -z $LAST ]; then
get_search_last
fi
) > $TMP/findpkg_out$$
# delete duplicate, consecutive or nonconsecutive lines from a file. Beware not to
# overflow the buffer size of the hold space, or else use GNU sed.
sed -i -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P' $TMP/findpkg_out$$
cat $TMP/findpkg_out$$ 2>/dev/null | wc --lines > $TMP/findpkg_count$$
if [ ! -z $ADVANCED ]; then
(
echo "[Package] [Date] [SizeOnDisk]"
echo
cat $TMP/findpkg_out$$ 2>/dev/null
) | column -t -c 3
if [ -z $LAST ]; then
echo "$(cat $TMP/findpkg_count$$ 2>/dev/null) match found."
rm -f $TMP/findpkg_count$$
fi
else
if [ -z $COLORED ]; then
cat $TMP/findpkg_out$$ 2>/dev/null
else
for ITEM in $QUERIES; do
cat $TMP/findpkg_out$$ 2>/dev/null | grep $COLORED $ITEM
done
fi
fi
rm -f $TMP/findpkg_out$$
rm -f $TMP/findpkg_count$$
exit 0
- tamy86
- Linux 0.x

- Messaggi: 13
- Iscritto il: dom 12 ott 2008, 10:59
- Nome Cognome: tamara muscas
- Slackware: 12.2
- Kernel: 2.6.30.5-sakura
- Desktop: kde 3.5.10
Re: findpkg
troppo utile
- paolo86
- Linux 0.x

- Messaggi: 73
- Iscritto il: lun 14 lug 2008, 19:22
- Nome Cognome: Paolo Cortis
- Slackware: Slackware64 current
- Kernel: 3.4.1-jiraiya
- Desktop: KDE 4.8.2
- Località: Cagliari
- Contatta:
Re: findpkg
Versione 0.7beta...
Ho fatto in modo che il pacchetto con la corrispondenza esatta appaia per primo e con un colore diverso (naturalmente con il flag -c)...
Ciao!!
Ho fatto in modo che il pacchetto con la corrispondenza esatta appaia per primo e con un colore diverso (naturalmente con il flag -c)...
Codice: Seleziona tutto
#!/bin/sh
#
# ============================= FINDPKG Tool ===================================
#
# Copyright 2008 Cavalleri Massimo (submax@tiscalinet.it)
# Cireddu Luca (luca@lucacireddu.it)
# Cortis Paolo (paolo86@altervista.org)
# 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.
#
# ___ changelog ___
#
# 0.7beta
# added different output color on exact matching while in colored mode
#
# 0.6beta2:
# delete duplicate, consecutive or nonconsecutive lines from result
# on multiple search
#
# 0.6beta:
# fix color and result for multiple search
#
# 0.5beta:
# fix bug get_info_pkg and set size on zero for removed packages
# rewrite with functions, tmp dir, tmp files from user
#
# 0.4beta:
# 1. New -a option
# 2. Removing of temp count file
# 3. New queries system
# 4. Added Colors
#
# 0.3beta:
# add search on removed packages
#
# 0.1beta and 0.2beta are initial versions
#
ADM_DIR="$ROOT/var/log"
TMP="$ROOT/tmp"
VER="0.7beta"
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)"
if [ -z $REMOVED ]; then
echo "$PKG_FULL_NAME $PKG_DATE ${UNCOMPRESSED_PACKAGE_SIZE}K"
else
echo "$(echo $PKG_FULL_NAME | sed 's/\-upgraded.*//g') $PKG_DATE ~0K"
fi
}
get_search_items() {
COUNT_PACKAGES=0
for ITEM in $QUERIES; do
if [ ! -z $ADVANCED ]; then
PACKAGES_ITEM="$(find $ADM_DIR/${REMOVED}packages/ -name "*$ITEM*" -exec basename {} \; | grep -E "^.+\-.+\-.+\-.+$")"
let COUNT_PACKAGES=$COUNT_PACKAGES+$(echo "$PACKAGES_ITEM" | wc --words)
for PKG_FULL_NAME in $PACKAGES_ITEM; do
get_info_pkg $PKG_FULL_NAME
done
else
find $ADM_DIR/${REMOVED}packages/ -name "*$ITEM*" -exec basename {} \; | grep -E "^.+\-.+\-.+\-.+$" | sed 's/\-upgraded.*//g'
fi
done
return $COUNT_PACKAGES
}
get_search_with_file() {
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
if [ ! -z $ADVANCED ]; then
get_info_pkg $PKG_FULL_NAME
let COUNT_PACKAGES+=1
else
echo $PKG_FULL_NAME | sed 's/\-upgraded.*//g'
fi
fi
done
return $COUNT_PACKAGES
}
get_search_last() {
if [ ! -z $ADVANCED ]; then
get_info_pkg $(ls -t $ADM_DIR/${REMOVED}packages/ | grep -E "^.+\-.+\-.+\-.+$" | head -n 1)
else
ls -t $ADM_DIR/${REMOVED}packages/ | grep -E "^.+\-.+\-.+\-.+$" | head -n 1 | sed 's/\-upgraded.*//g'
fi
}
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"
shift 2
;;
esac
;;
-L | --last)
shift
LAST="1"
;;
-v | --version)
echo "$(basename $0) version $VER"
exit
;;
-a | --advanced)
ADVANCED="1"
shift
;;
-c | --color)
COLORED="--color"
shift
;;
-r | --removed)
REMOVED="removed_"
shift
;;
*)
QUERIES="$QUERIES $1"
shift
;;
esac
let COUNTER=$COUNTER-1
done
#MAIN
(if [ ! -z "$QUERIES" ]; then
get_search_items
fi
if [ ! -z "$FDB" ]; then
get_search_with_file
fi
if [ ! -z $LAST ]; then
get_search_last
fi
) > $TMP/findpkg_out$$
# delete duplicate, consecutive or nonconsecutive lines from a file. Beware not to
# overflow the buffer size of the hold space, or else use GNU sed.
sed -i -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P' $TMP/findpkg_out$$
cat $TMP/findpkg_out$$ 2>/dev/null | wc --lines > $TMP/findpkg_count$$
if [ ! -z $ADVANCED ]; then
(
echo "[Package] [Date] [SizeOnDisk]"
echo
cat $TMP/findpkg_out$$ 2>/dev/null
) | column -t -c 3
if [ -z $LAST ]; then
echo "$(cat $TMP/findpkg_count$$ 2>/dev/null) match found."
rm -f $TMP/findpkg_count$$
fi
else
if [ -z $COLORED ]; then
cat $TMP/findpkg_out$$ 2>/dev/null
else
for ITEM in $QUERIES; do
cat $TMP/findpkg_out$$ 2>/dev/null | GREP_COLOR=32 grep -x $COLORED $ITEM-[^-]*-[^-]*-[^-]*
cat $TMP/findpkg_out$$ 2>/dev/null | grep -x -v $ITEM-[^-]*-[^-]*-[^-]* | grep $COLORED $ITEM
done
fi
fi
rm -f $TMP/findpkg_out$$
rm -f $TMP/findpkg_count$$
exit 0