Repository 32bit  Forum
Repository 64bit  Wiki

[BASH] Eliminare solo certi files [RISOLTO]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Specificare sempre il tipo di shell (bash, sh, csh, etc...)
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 dell'ultima regola 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 12: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 14:07, modificato 1 volta in totale.
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3052
Iscritto il: ven ott 12, 2007 11:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14 x64 / 12.2
Kernel: 3.2.x
Desktop: Xfce

Re: [BASH] Eliminare solo certi files

Messaggioda masalapianta » mer dic 21, 2011 12: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: 2358
Iscritto il: lun lug 25, 2005 0: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 14: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: 3052
Iscritto il: ven ott 12, 2007 11:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14 x64 / 12.2
Kernel: 3.2.x
Desktop: Xfce

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

Messaggioda targzeta » mer dic 21, 2011 21: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
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: 5907
Iscritto il: gio nov 03, 2005 15: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 0 ospiti

cron