Repository 32bit  Forum
Repository 64bit  Wiki

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.

Re: findpkg

Messaggioda puzuma » ven set 05, 2008 15:43

@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
puzuma
Linux 2.4
Linux 2.4
 
Messaggi: 481
Iscritto il: mar lug 04, 2006 16:14
Località: Udine
Nome Cognome: Stefano Salvador
Slackware: current
Kernel: 2.6.32.2
Desktop: KDE 4.4.0

Re: findpkg

Messaggioda Blizzard » ven set 05, 2008 17:12

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
Blizzard
Master
Master
 
Messaggi: 1509
Iscritto il: mar gen 02, 2007 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox

Re: findpkg

Messaggioda absinthe » ven set 05, 2008 17:46

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
Avatar utente
absinthe
Iper Master
Iper Master
 
Messaggi: 2354
Iscritto il: sab mag 14, 2005 23:00
Località: Prato
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze

Re: findpkg

Messaggioda Mario Vanoni » ven set 05, 2008 19:04

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?
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: findpkg

Messaggioda absinthe » lun set 08, 2008 10:25

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 set 08, 2008 10:34, modificato 1 volta in totale.
Avatar utente
absinthe
Iper Master
Iper Master
 
Messaggi: 2354
Iscritto il: sab mag 14, 2005 23:00
Località: Prato
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze

Re: findpkg

Messaggioda conraid » lun set 08, 2008 10:27

absinthe ha scritto:odio la neve, il ghiaccio, la sabbia e il mare.


Finalmente qualcuno con i miei "gusti" :-)
Avatar utente
conraid
Staff
Staff
 
Messaggi: 12022
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: findpkg

Messaggioda submax82 » lun set 08, 2008 13:43

@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
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: findpkg

Messaggioda Mario Vanoni » lun set 08, 2008 15:08

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)
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: findpkg

Messaggioda absinthe » mar set 09, 2008 9:25

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
Avatar utente
absinthe
Iper Master
Iper Master
 
Messaggi: 2354
Iscritto il: sab mag 14, 2005 23:00
Località: Prato
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze

Re: findpkg

Messaggioda Mario Vanoni » mar set 09, 2008 14:27

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!
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: findpkg

Messaggioda submax82 » gio set 11, 2008 23:55

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
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: findpkg

Messaggioda sardylan » ven set 12, 2008 9:45

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
sardylan
Linux 2.6
Linux 2.6
 
Messaggi: 993
Iscritto il: mar apr 24, 2007 8:21
Località: Cagliari
Nome Cognome: Luca Cireddu
Slackware: current 64bits
Kernel: 3.16
Desktop: KDE 4.5.5
Distribuzione: Debian - CLFS

Re: findpkg

Messaggioda submax82 » ven set 12, 2008 10:41

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
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: findpkg

Messaggioda tamy86 » dom ott 12, 2008 10:31

=D> GRAZIE SARDYLAN [-o<
troppo utile
Avatar utente
tamy86
Linux 1.0
Linux 1.0
 
Messaggi: 13
Iscritto il: dom ott 12, 2008 9:59
Nome Cognome: tamara muscas
Slackware: 12.2
Kernel: 2.6.30.5-sakura
Desktop: kde 3.5.10

Re: findpkg

Messaggioda paolo86 » gio ott 16, 2008 10:56

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!!
Avatar utente
paolo86
Linux 1.0
Linux 1.0
 
Messaggi: 73
Iscritto il: lun lug 14, 2008 18:22
Località: Cagliari
Nome Cognome: Paolo Cortis
Slackware: Slackware64 current
Kernel: 3.4.1-jiraiya
Desktop: KDE 4.8.2

PrecedenteProssimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti