Repository 32bit  Forum
Repository 64bit  Wiki

[BASH] Eliminare solo certi files [RISOLTO]

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.

[BASH] Eliminare solo certi files [RISOLTO]

Messaggioda Blallo » mer dic 21, 2011 11:22

Ho un elenco di files di questo tipo:
Codice: Seleziona tutto
a-0.1.tar.bz2
a-0.1.tar.gz
a-0.2.tar.bz2
a-0.2.tar.gz
a-0.3.tar.bz2
a-0.3.tar.gz
b-0.1.tar.bz2
b-0.1.tar.gz
b-0.2.tar.bz2
b-0.2.tar.gz

.. e via discorrendo.
Mi occorrerebbe uno script che elimini tutti gli archivi con versione inferiore alla maggiore e poi a sua volta mi tenga il tar.bz2
Es: dovrebbero rimanermi, dalla lista sopra, solo
Codice: Seleziona tutto
a-0.3.tar.bz2
b-0.2.tar.bz2

Solo che non ho la minima idea per cominciare nemmeno!
Qualcun ha idee?
Ultima modifica di Blallo il mer dic 21, 2011 13:07, modificato 1 volta in totale.
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3243
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: [BASH] Eliminare solo certi files

Messaggioda masalapianta » mer dic 21, 2011 11:52

rm *gz; for i in `ls|awk -F '-' '{print $1}'|sort|uniq`; do for j in `ls $i-*|awk -F '-' '{print $2}'|awk -F '.tar.bz2' '{print $1}'|sort -r -n|uniq|tail -n +2`; do rm $i-$j.tar.bz2;done;done
Avatar utente
masalapianta
Iper Master
Iper Master
 
Messaggi: 2775
Iscritto il: dom lug 24, 2005 23:00
Località: Roma
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian

Re: [BASH] Eliminare solo certi files

Messaggioda Blallo » mer dic 21, 2011 13:07

Esattamente quel che mi serviva! Grazie masa :)
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3243
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: [BASH] Eliminare solo certi files [RISOLTO]

Messaggioda targzeta » mer dic 21, 2011 20:47

Un altra soluzione "più rapida" potrebbe essere questa:
Codice: Seleziona tutto
rm *gz;old_file=""; for file in *; do  [[ ${file%%-*} == ${old_file%%-*} ]] && rm $old_file; old_file=${file}; done
In pratica controlla due file successivi e se la parte iniziale (la parte prima del primo '-') è uguale per entrambi, allora cancella il primo dei due file. Si bassa sul fatto che i file sono già ordinati lessicograficamente.

Nota0: come ho scritto qualche giorno fa in un altro thread, il 'for in *' dovrebbe ritornare i file ordinati (anche se non l'ho mai trovato scritto da nessuna parte), comunque, per stare più tranquillo potresti usare:
Codice: Seleziona tutto
for file in $(ls *)

Nota1: se controlli bene l'algoritmo noterai che l'ultimo file ".bz2" non verrà mai cancellato, ma dovrebbe essere il comportamento voluto.

Emanuele
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: 6195
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti