findpkg

Forum dedicato alla programmazione.

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.
Avatar utente
puzuma
Linux 2.x
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

Messaggio da puzuma »

@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.
The quiet ones are the ones who change the world. The loud ones only take the credit.

Avatar utente
Blizzard
Master
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

Messaggio da Blizzard »

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 :-k

@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 :D
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);
}
per utilizzarlo

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$ 
provatelo ;)

Gio

Avatar utente
absinthe
Iper Master
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

Messaggio da absinthe »

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

Mario Vanoni
Iper Master
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

Messaggio da Mario Vanoni »

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
ash(1) non e` bash(1) che (quasi) tutti usano,
$(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?

Avatar utente
absinthe
Iper Master
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

Messaggio da absinthe »

Mario Vanoni ha scritto: ash(1) non e` bash(1) che (quasi) tutti usano,
$(cmd) lo mangia, ma la [t]csh no!
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.
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.
Non esiste regola quale shell sia shell di sistema,
per difetto (default) e` la bash, ma non certo.
spiego meglio:
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.
Camminare sul lago con 1 cm di ghiacco?
Offtopic: odio la neve, il ghiaccio, la sabbia e il mare.

M
Ultima modifica di absinthe il lun 8 set 2008, 11:34, modificato 1 volta in totale.

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: findpkg

Messaggio da conraid »

absinthe ha scritto: odio la neve, il ghiaccio, la sabbia e il mare.
Finalmente qualcuno con i miei "gusti" :-)

Avatar utente
submax82
Staff
Staff
Messaggi: 3202
Iscritto il: mer 31 ago 2005, 0:00
Desktop: xfce
Distribuzione: SalixOS
Contatta:

Re: findpkg

Messaggio da submax82 »

@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 :D.
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
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

Messaggio da Mario Vanoni »

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.
Di quale ksh parli?

pdksh (public domain)
ksh93 (AT&T)

Avatar utente
absinthe
Iper Master
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

Messaggio da absinthe »

Mario Vanoni ha scritto:
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.
Di quale ksh parli?

pdksh (public domain)
ksh93 (AT&T)
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.0

M

Mario Vanoni
Iper Master
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

Messaggio da Mario Vanoni »

absinthe ha scritto:
Mario Vanoni ha scritto:
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.
Di quale ksh parli?

pdksh (public domain)
ksh93 (AT&T)
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.0

M
Per questo il mondo DEBIAN usa solo pdksh, licenza non compatible GPL!

Avatar utente
submax82
Staff
Staff
Messaggi: 3202
Iscritto il: mer 31 ago 2005, 0:00
Desktop: xfce
Distribuzione: SalixOS
Contatta:

Re: findpkg

Messaggio da submax82 »

ecco la nuova versione 0.5

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
funzia tutto tranne i colori ... almeno così sembra :-k

è 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.

Avatar utente
sardylan
Linux 3.x
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

Messaggio da sardylan »

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...

Avatar utente
submax82
Staff
Staff
Messaggi: 3202
Iscritto il: mer 31 ago 2005, 0:00
Desktop: xfce
Distribuzione: SalixOS
Contatta:

Re: findpkg

Messaggio da submax82 »

nuova versione, i colori ora funziano, inoltre ho sistemato le cose per comandi tipo:

Codice: Seleziona tutto

findpkg server kde -a
findpkg server -F soffice -a
findpkg server -F libxmms
findpkg xorg server
eccola, versione 0.6beta2

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
magari alcune cose che volevi sistemare lo sono già... booo prova a darci un occhio :thumbright:

Avatar utente
tamy86
Linux 0.x
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

Messaggio da tamy86 »

=D> GRAZIE SARDYLAN [-o<
troppo utile

Avatar utente
paolo86
Linux 0.x
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

Messaggio da paolo86 »

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)...

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
Ciao!!

Rispondi