Newsgroup: it.comp.os.linux.sys
Titolo: bash, individuare file con nome quasi uguale..

Ciao,
devo mantenere aggiornata e "pulita" una dir che contiene RPM, in 
pratica vorrei farmi uno script capace di individuare file con nomi 
quasi uguali. La unica differenza sarebbe il numero di versione o di 
release, tipo:
pippo-1.0-1.rpm e pippo-1.1-1.rpm o pippo-1.0-2.rpm, la cosa si complica 
perché ci sono anche pacchetti tipo: pippo-devel-1.0-1.rpm e il 
delimitatore nome-versione non sempre è il "-" ma in alcuni casi cè 
"_".
Mi sto scervelando con tutte le possibili "utility" (sort, cut, awk, 
uniq, diff, etc,etc..) ma onestamente non ne vengo proprio fuori, le 
vaiabili da prendere in considerazione mi sembrano un po' troppe..
Avete qualche idea o conoscete qualche programmino adattato ?
Ciao e grazie.
-- 
***  Per E-mail rimuovi ModE dall'indirizzo  ***
  *** Linux user # 198661 --- ICQ 33500725 ***
*** homepage 
http://web.tiscalinet.it/kailed
 ***
            *** Powered by Linux ***


I'm not prejudiced, I hate everyone equally.

 find /dir/rpm/pippo*
Il problema che io non so il nome del file..
Ciao.


 Avete qualche idea o conoscete qualche programmino adattato ?
Prova con questo:
cd directory_con_gli_rpm
dup=$(ls | tr '_' '-' | sed -e 's/-[0-9].*rpm//g' | uniq -d)
for p in $dup; do echo "packages for $p:"; ls -1 $p*; done
Non e` il massimo dell'efficienza...
Quel che vuoi fare dei duplicati lo scrivi al posto di ls -1 $p*.  Non
dovrebbe essere troppo difficile eliminarli tutti eccetto il piu`
recente per data $(ls -t $p* | head -1).
Massimiliano
-- 
The Practical Penguin's Notebook - 
http://practicaltux.sourceforge.net
Guide per newbie pratiche al 100%: configurazione della posta
(Postfix, Fetchmail e Procmail), tutorial da zero su Mutt ed Emacs.

 Non e` il massimo dell'efficienza...
Ci prende, pure troppo però:
packages for docbook:
docbook-dsssl-stylesheets_1.74b-87_noarch.rpm
docbook_3_3.1-218_noarch.rpm
docbook_4_4.1-288_noarch.rpm
packages for xf86:
xf86_3x_3.3.6-427_i386.rpm
xf86_4.2.0-107_i386.rpm
xf86_glx_4.2.0-107_i386.rpm
xf86tools_0.1-281_i386.rpm
xf86tools_0.1-361_i386.rpm
Così è inaffidabile:(
Grazie comunque.
Ciao.


 Avete qualche idea o conoscete qualche programmino adattato ?
Perche` non usare direttamente rpm?
Per esempio: rpm -q -i -p pippo-1.0-2.i386.rpm
potrebbe essere un punto di partenza.
In pratica il tuo problema e` lo stesso che ha rpm.
Direi che dare un occhiata al manuale, sezione query,
potrebbe portare anche altre idee.
bye,
-- 
piergiorgio

 potrebbe portare anche altre idee.
Non mi convince:)
Sono sempre più dell'idea che farlo in bash sia a dir poco scomodo..
Ciao.


 centinaia ( al momento sono 731..) 
Ma hai provato?
Hai notato le prime 2 righe?
Contegono esattamente cio` che ti serve, cioe`
il nome e la versione in campi separati.
Ha fatto il lavoro per te.
Allora con un po' di fantasia e qualche altro
accessorio della shell, puoi trovarti i duplicati,
cioe` i file che differiscono solo per la versione,
ma non per il nome.
bye,
-- 
piergiorgio

 ma non per il nome.
Ok, ci faccio uno studio e vediamo:)


perché ci sono anche pacchetti tipo: pippo-devel-1.0-1.rpm 
$rpm -qpi e2fsprogs-1.26-1.72.i386.rpm
Name        : e2fsprogs                    Relocations: (not relocateable)
Version     : 1.26                              Vendor: Red Hat, Inc.
Release     : 1.72                          
$rpm -qpi e2fsprogs-devel-1.26-1.72.i386.rpm
Name        : e2fsprogs-devel              Relocations: (not relocateable)
Version     : 1.26                              Vendor: Red Hat, Inc.
Release     : 1.72                         
Quindi ti conviene eseguire "rpm -qpi" sul file che ti interessa,
l'output conterrà i campi Name, Version e Release che ti fanno lo
scompattamento tra nome, versione e release. Se poi devi distinguere
anche i devel, basta che cerchi se il nome finisce per "-devel".
-- 
"L'Italia è un interessante esempio di avanguardia teatrale" (Gore Vidal)
Per rispondermi, ricordati di togliere il 
nome del poeta e il trattino.

 docbook_4_4.1-288_noarch.rpm
Doh, erroraccio mio.  Prova a cambiare l'ultima riga cosi`:
for p in $dup; do echo "packages for $p:"; ls $p* | grep "$p[-_][0-9]"; done
Massimiliano

 "$p[-_][0-9]"; done
Così pare funzionare, adesso faccio un po' di prove, poi magari provo 
anche utilizzando direttamente...
 
Grazie, ciao.
