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.4
Linux 2.4
Messaggi: 482
Iscritto il: mar lug 04, 2006 17:14
Nome Cognome: Stefano Salvador
Slackware: current
Kernel: 2.6.32.2
Desktop: KDE 4.4.0
Località: Udine
Contatta:

Re: findpkg

Messaggioda puzuma » ven set 05, 2008 16: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
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
Contatta:

Re: findpkg

Messaggioda Blizzard » ven set 05, 2008 18: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
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom mag 15, 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

Messaggioda absinthe » ven set 05, 2008 18: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

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun set 03, 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

Messaggioda Mario Vanoni » ven set 05, 2008 20: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?

Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom mag 15, 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

Messaggioda absinthe » lun set 08, 2008 11: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 11:34, modificato 1 volta in totale.

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

Re: findpkg

Messaggioda conraid » lun set 08, 2008 11:27

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 ago 31, 2005 0:00
Desktop: xfce
Distribuzione: SalixOS
Contatta:

Re: findpkg

Messaggioda submax82 » lun set 08, 2008 14: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

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun set 03, 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

Messaggioda Mario Vanoni » lun set 08, 2008 16: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)

Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom mag 15, 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

Messaggioda absinthe » mar set 09, 2008 10: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

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun set 03, 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

Messaggioda Mario Vanoni » mar set 09, 2008 15: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!

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

Re: findpkg

Messaggioda submax82 » ven set 12, 2008 0: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
sardylan
Linux 2.6
Linux 2.6
Messaggi: 993
Iscritto il: mar apr 24, 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

Messaggioda sardylan » ven set 12, 2008 10: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
submax82
Staff
Staff
Messaggi: 3202
Iscritto il: mer ago 31, 2005 0:00
Desktop: xfce
Distribuzione: SalixOS
Contatta:

Re: findpkg

Messaggioda submax82 » ven set 12, 2008 11: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
tamy86
Linux 1.0
Linux 1.0
Messaggi: 13
Iscritto il: dom ott 12, 2008 10:59
Nome Cognome: tamara muscas
Slackware: 12.2
Kernel: 2.6.30.5-sakura
Desktop: kde 3.5.10

Re: findpkg

Messaggioda tamy86 » dom ott 12, 2008 11:31

=D> GRAZIE SARDYLAN [-o<
troppo utile

Avatar utente
paolo86
Linux 1.0
Linux 1.0
Messaggi: 73
Iscritto il: lun lug 14, 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

Messaggioda paolo86 » gio ott 16, 2008 11: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!!


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite