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 Blizzard » mar set 02, 2008 21:43

Offtopic: anch'io uso sempre B/W, tranne quando usavo il fb che aveva la bash di default settata con i colori.
Ricordo che su ls particolarmente grandi i colori cominciavano ad essere caotici.
L'esperienza peggiore comunque è con alcuni editor, ad esempio emacs e la sintassi C che ha colori orribili (tipo rosso scuro su nero [-( ).
Il syntax highlighting in B/W invece è sempre fantastico

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 submax82 » mer set 03, 2008 0:30

Vito ha scritto:Io invece usavo : "ls /var/log/packages | grep nomepacchetto"...

niente male davvero lo script!


anche io ma lo script è iper fantastico! quasi quasi propongo a Pat di inserirlo nei pkgtools... semplicissimo e comodisssimo
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: findpkg

Messaggioda conraid » mer set 03, 2008 8:45

Credo che metterlo tra virgolette sia più coerente, se usato senza colori


Codice: Seleziona tutto
for ITEM in $@; do
find /var/log/packages/ -name "*$ITEM*" | sed 's%/var/log/packages/%%'
done


Comunque giochino del mattino.
Quali di questi è più veloce e perché?
Il perché sinceramente non lo so

1
Codice: Seleziona tutto
for ITEM in $@; do
find /var/log/packages/ -name "*$ITEM*" | sed 's%/var/log/packages/%%g'
done


2
Codice: Seleziona tutto
for ITEM in $@; do
find /var/log/packages/ -name "*$ITEM*" | cut -d/ -f5 
done


3
Codice: Seleziona tutto
for ITEM in $@; do
find /var/log/packages/ -name "*$ITEM*" -exec basename {} \;
done


4
Codice: Seleziona tutto
for ITEM in $@; do
find /var/log/packages/ -name "*$ITEM*" | awk -F/ '{print $5}' 
done


5
Codice: Seleziona tutto
for ITEM in $@; do
find /var/log/packages/ -name "*$ITEM*" | sed 's%/var/log/packages/%%'
done


p.s.
non serve a niente, ma in questo periodo sono specializzato nel fare cose inutili :-)
Avatar utente
conraid
Staff
Staff
 
Messaggi: 12016
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: findpkg

Messaggioda sardylan » mer set 03, 2008 14:44

submax82 ha scritto:
Vito ha scritto:Io invece usavo : "ls /var/log/packages | grep nomepacchetto"...

niente male davvero lo script!


anche io ma lo script è iper fantastico! quasi quasi propongo a Pat di inserirlo nei pkgtools... semplicissimo e comodisssimo

submax... Buona idea!!! Lo contatti tu o lo contatto io??
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 Vito » mer set 03, 2008 15:28

submax82 ha scritto:
Vito ha scritto:Io invece usavo : "ls /var/log/packages | grep nomepacchetto"...

niente male davvero lo script!


anche io ma lo script è iper fantastico! quasi quasi propongo a Pat di inserirlo nei pkgtools... semplicissimo e comodisssimo


Sarebbe grandioso!
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]
Avatar utente
Vito
Staff
Staff
 
Messaggi: 4134
Iscritto il: mar dic 05, 2006 17:28
Località: Augsburg (DE)
Nome Cognome: Vito
Slackware: 64 14.0 multilib
Kernel: 3.2.29-xps
Desktop: KDE 4.10.2
Distribuzione: Linux Mint 17

Re: findpkg

Messaggioda Mario Vanoni » mer set 03, 2008 15:38

conraid ha scritto:Credo che metterlo tra virgolette sia più coerente, se usato senza colori


Codice: Seleziona tutto
for ITEM in $@; do
find /var/log/packages/ -name "*$ITEM*" | sed 's%/var/log/packages/%%'
done


Comunque giochino del mattino.
Quali di questi è più veloce e perché?
Il perché sinceramente non lo so

1
Codice: Seleziona tutto
for ITEM in $@; dofind /var/log/packages/ -name "*$ITEM*" | sed 's%/var/log/packages/%%g'
done


2
Codice: Seleziona tutto
for ITEM in $@; do
find /var/log/packages/ -name "*$ITEM*" | cut -d/ -f5 
done


3
Codice: Seleziona tutto
for ITEM in $@; do
find /var/log/packages/ -name "*$ITEM*" -exec basename {} \;
done


4
Codice: Seleziona tutto
for ITEM in $@; do
find /var/log/packages/ -name "*$ITEM*" | awk -F/ '{print $5}' 
done


5
Codice: Seleziona tutto
for ITEM in $@; do
find /var/log/packages/ -name "*$ITEM*" | sed 's%/var/log/packages/%%'
done


p.s.
non serve a niente, ma in questo periodo sono specializzato nel fare cose inutili :-)


Con time prima di find:

Numero variante : prima chiamata : ulteriori chiamate
1 : 0.060s : 0.00[23]s
2 : 0.002s : 0.00[23]s
3 : 0.004s : 0.00[45]s
4 : 0.003s : 0.00[34]s
5 : 0.003s : 0.00[23]s

cut(1) vince!

[OT]
Secondo il consiglio di Brian W. Kernighan
preferibilmente usare "@" quale carattere
divisore alternativo con sed(1) al posto di "/".
[\OT]
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 conraid » mer set 03, 2008 15:58

@mario

anche a me va più veloce cut, se poi metti qualcosa findpkg x lo vedi molto, ma la più lenta mi è risultata quella con basename :-k

di usare @ non lo sapevo, solitamente uso quel che so che non trovo sicuramente, ma dopo / scelgo sempre %
Avatar utente
conraid
Staff
Staff
 
Messaggi: 12016
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: findpkg

Messaggioda targzeta » mer set 03, 2008 16:09

Così a naso sembrerebbe come dice conraid. Perchè in tutti i casi, a parte quello con basename, vengono eseguiti due comandi, e dato che cut è il più "adatto" a fare questo genere di cose (è più snello e poi è il suo lavoro. sed e awk fanno altro....tanto altro), allora dovrebbe risultare lui il più veloce. Il più lento dovrebbe essere, in generale, quello con "-exec basename" perchè solo in quel caso non vengono eseguiti due comandi, ma N+1, dove N è il numero di matching che fa find. Per questo motivo, quando si può, invece di usare -exec di find, si consiglia di mettere find in pipe con xargs.

Spina

P.S. coma alternativa a '/' io ho letto su un libro di Unix che si dovrebbe usare il ';', pensa un pò :).
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6168
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: findpkg

Messaggioda sardylan » mer set 03, 2008 16:12

conraid ha scritto:non serve a niente, ma in questo periodo sono specializzato nel fare cose inutili :-)


Conraid... E come se serve...
La versione più veloce sarà sicuramente la più gettonata... Ed anche la migliore eventualmente da presentare a PJV!!!
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 m0rdr3d » mer set 03, 2008 18:37

Accidenti, i miei complimenti, questo script mi piace un sacco!
Avatar utente
m0rdr3d
Linux 2.4
Linux 2.4
 
Messaggi: 404
Iscritto il: dom dic 24, 2006 13:40
Slackware: Slackware64-current
Kernel: 3.4.*
Desktop: KDE 4.8.2

Re: findpkg

Messaggioda Vito » mer set 03, 2008 18:47

Ma i comandi di pkgtool sono tutti scritti in bash?
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]
Avatar utente
Vito
Staff
Staff
 
Messaggi: 4134
Iscritto il: mar dic 05, 2006 17:28
Località: Augsburg (DE)
Nome Cognome: Vito
Slackware: 64 14.0 multilib
Kernel: 3.2.29-xps
Desktop: KDE 4.10.2
Distribuzione: Linux Mint 17

Re: findpkg

Messaggioda submax82 » mer set 03, 2008 20:12

sardylan ha scritto:
submax82 ha scritto:
Vito ha scritto:Io invece usavo : "ls /var/log/packages | grep nomepacchetto"...

niente male davvero lo script!


anche io ma lo script è iper fantastico! quasi quasi propongo a Pat di inserirlo nei pkgtools... semplicissimo e comodisssimo

submax... Buona idea!!! Lo contatti tu o lo contatto io??


no aspetta così non è bellissimo l'ho migliorato parecchio... e mofificato un pò... anzi se mi dici nome e cognome ti metto nella licenza... poi lo pubblico..., sto facendo dei pkgtools "newgen", quindi lo posso segnalare io se vuoi.

eccolo per adesso: (è solo una bozza, l'ho scritto veloce e l'inglese...:D)

Codice: Seleziona tutto
#!/bin/sh
# Copyright 2008 Cavalleri Massimo, Milan, Italy
# 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.

ADM_DIR=$ROOT/var/log
VER=0.2beta

echo_help()
{
echo "Find packages with string on db or if use -F option search on db the packages that track the file or link"
echo "Usage: $(basename $0) [-F | --file-db] string"
}

get_info_pkg()
{
 # $1 package full name
 PKG_FULL_NAME=$1
 UNCOMPRESSED_PACKAGE_SIZE="$(cat $ADM_DIR/packages/$PKG_FULL_NAME | grep "UNCOMPRESSED PACKAGE SIZE" | cut -d":" -f2 | awk -F" " '{print $1}')"
 PKG_DATE_INSTALL=$(ls -l $ADM_DIR/packages/$PKG_FULL_NAME | cut -d" " -f6)
 echo "$PKG_FULL_NAME $PKG_DATE_INSTALL ${UNCOMPRESSED_PACKAGE_SIZE}K"
}

if [ $# = 0 ]; then
   echo_help; exit
fi

while [ 0 ]; do
   case $1 in
     -H | --help)    echo_help; exit ;;
     -F | --file-db) FDB=$2; shift 2;;
     -v | --version) echo "$0 version $VER"; exit ;;
     *) break ;;
   esac
done

(if [ -z $FDB ]; then
ITEM=$1
PACKAGES_ITEM="$(find $ADM_DIR/packages/ -name "*$ITEM*" -exec basename {} \; | grep -E "^.+\-.+\-.+\-.+$")"
COUNT_PACKAGES=$(echo "$PACKAGES_ITEM" | wc --words)
echo "[package] [date] [size]"
 for PKG_FULL_NAME in $PACKAGES_ITEM; do
     get_info_pkg $PKG_FULL_NAME
 done
elif [ ! -z $FDB ]; then
PACKAGES=$(ls $ADM_DIR/packages/ | grep -E "^.+\-.+\-.+\-.+$")
COUNT_PACKAGES=0
echo "[package] [date] [size]"
 for PKG_FULL_NAME in $PACKAGES; do
    if [ ! -z "$(cat $ADM_DIR/packages/$PKG_FULL_NAME | grep $FDB)" ] || \
       [ ! -z "$(cat $ADM_DIR/scripts/$PKG_FULL_NAME 2> /dev/null | sed -n 's,^( *cd \([^ ;][^ ;]*\) *; *rm -rf \([^ )][^ )]*\) *) *$,\1/\2,p' | grep $FDB)" ]; then
         get_info_pkg $PKG_FULL_NAME
         let "COUNT_PACKAGES+=1"
    fi
 done
fi ; echo $COUNT_PACKAGES > /tmp/findpkg_count ) | column -t -c 3
echo "$(cat /tmp/findpkg_count) match found."
exit 0


esempi di output
Codice: Seleziona tutto
# findpkg --file-db libxmms.so.1
[package]                [date]      [size]
xmms-1.2.11-i486-3ultra  2008-05-13  34600K
1 match found.
# findpkg --file-db vmlinuz
[package]                              [date]      [size]
kernel-image-2.6.24.7_smp-x86-kpkg092  2008-07-02  56970K
1 match found.
# findpkg glibc; findpkg kernel
[package]                     [date]      [size]
glibc-profile-2.7-i486-10     2008-05-11  4150K
glibc-i18n-2.7-noarch-10      2008-05-11  89490K
glibc-zoneinfo-2.7-noarch-10  2008-05-11  3040K
glibc-2.7-i486-10             2008-05-11  111430K
glibc-solibs-2.7-i486-10      2008-05-11  9730K
5 match found.
[package]                                [date]      [size]
kernel-image-2.6.24.7_smp-x86-kpkg092    2008-07-02  56970K
kernel-headers-2.6.24.7_smp-x86-kpkg092  2008-07-02  14090K
kernelpkg-0.9.3-noarch-1sm               2008-07-04  210K
3 match found.
# echo fine
fine


non voglio "rubare" l'idea se vuoi ti metto nella licenza

Vito ha scritto:Ma i comandi di pkgtool sono tutti scritti in bash?


certo anzi ash shell
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: findpkg

Messaggioda conraid » gio set 04, 2008 9:00

submax82 ha scritto:no aspetta così non è bellissimo l'ho migliorato parecchio...


punti di vista
Avatar utente
conraid
Staff
Staff
 
Messaggi: 12016
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: findpkg

Messaggioda sardylan » gio set 04, 2008 10:34

Submax... Lavoro fantastico!! Con tutte quelle info che da e bellissimo... =D> =D>
Però ha perso la semplicità dell'idea iniziale!!!
Non mi intendo molto di awk, sed, cut, etc... Però pensavo un qualcosa di più semplice...
Si potrebbe fare un mix, se sei d'accordo!!
Che ne so... Un esempio!!:
findpkg query fa l'output semplice semplice... Magari in bianco e nero!!!
findpkg --color query oppure findpkg -c query fa l'output semplice semplice... Colorato!!!
findpkg --list query oppure findpkg -l query (più le varie -h o -F) fa la tabella così come l'hai fatta tu!!!
Naturalmente il -v della versione rimane sempre...
Un po' come con ls... non so se rendo l'idea!!!
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 » gio set 04, 2008 14:02

ok ti posto l'ultima versione, vediamo cosa ne viene fuori

Codice: Seleziona tutto
#!/bin/sh
# Copyright 2008 Cavalleri Massimo and Luca Cireddu (luca@lucacireddu.it)
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
#  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
#  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
#  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
#  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
#  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
#  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

ADM_DIR=$ROOT/var/log
VER=0.3beta

echo_help()
{
echo "Find installed or removed packages with a string"
echo "Usage: $(basename $0) [ options ] string"
echo "es. $(basename $0) kde"
echo "If you add follow options:"
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"
}

get_info_pkg()
{
 # $1 package full name
 PKG_FULL_NAME=$1
 UNCOMPRESSED_PACKAGE_SIZE="$(cat $ADM_DIR/${REMOVED}packages/$PKG_FULL_NAME | \
                              grep "UNCOMPRESSED PACKAGE SIZE" | cut -d":" -f2 | awk -F" " '{print $1}')"
 PKG_DATE=$(ls -l $ADM_DIR/${REMOVED}packages/$PKG_FULL_NAME | cut -d" " -f6)
 echo "$(echo $PKG_FULL_NAME | cut -d"-" -f -4) $PKG_DATE ${UNCOMPRESSED_PACKAGE_SIZE}K"
}

if [ $# = 0 ]; then
   echo_help; exit
fi

while [ 0 ]; do
   case $1 in
     -H | --help)            echo_help; exit ;;
     -F | --with-file)       FDB=$2; shift 2;;
     -L | --last)            shift; LAST=1;;
     -v | --version)         echo "$(basename $0) version $VER"; exit ;;
     -r | --removed)         REMOVED="removed_"; shift;;
     *) break ;;
   esac
done

(echo "[Package] [Date] [SizeOnDisk]"
if [ -z $FDB ] && [ -z $LAST ]; then
ITEM=$1
PACKAGES_ITEM="$(find $ADM_DIR/${REMOVED}packages/ -name "*$ITEM*" -exec basename {} \; | grep -E "^.+\-.+\-.+\-.+$")"
COUNT_PACKAGES=$(echo "$PACKAGES_ITEM" | wc --words)
 for PKG_FULL_NAME in $PACKAGES_ITEM; do
     get_info_pkg $PKG_FULL_NAME
 done
elif [ ! -z $FDB ] && [ -z $LAST ]; then
PACKAGES=$(ls $ADM_DIR/${REMOVED}packages/ | grep -E "^.+\-.+\-.+\-.+$")
COUNT_PACKAGES=0
 for PKG_FULL_NAME in $PACKAGES; do
    if [ ! -z "$(cat $ADM_DIR/${REMOVED}packages/$PKG_FULL_NAME | grep $FDB)" ] || \
       [ ! -z "$(cat $ADM_DIR/${REMOVED}scripts/$PKG_FULL_NAME 2> /dev/null | \
               sed -n 's,^( *cd \([^ ;][^ ;]*\) *; *rm -rf \([^ )][^ )]*\) *) *$,\1/\2,p' | grep $FDB)" ]; then
         get_info_pkg $PKG_FULL_NAME
         let "COUNT_PACKAGES+=1"
    fi
 done
elif [ ! -z $LAST ]; then
  get_info_pkg $(ls -t $ADM_DIR/${REMOVED}packages/ | grep -E "^.+\-.+\-.+\-.+$" | head -n 1)
fi ; echo $COUNT_PACKAGES > /tmp/findpkg_count ) | column -t -c 3
if [ -z $LAST ]; then
echo "$(cat /tmp/findpkg_count 2>/dev/null) match found."
fi
exit 0

Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

PrecedenteProssimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti