Newsgroup: it.comp.os.linux.development
Titolo: Cancellare ultimi n file

Diciamo che io abbia in una dir un po' di file e voglia tenere solo gli
n più recenti. Volevo realizzare uno script che cancelli quelli più
vecchi.
ls -t me li dà ordinati per data, in pipe con head mi darebbe i primi 
n, ma io voglio gli altri... e tail, se i file sono meno di n, me li
elenca tutti.
Idee?
-- 
Herbie

 Idee?
info find
find somedir -newer somefile rm {}\;
 

 find somedir -newer somefile rm {}\;
No scusa... questo mi cancella i file piů nuovi di un certo file, io non
ho riferimenti, e non č questione di date ma solo di cancellare "i piů
vecchi"  senza sapere a priori quale sia il piů nuovo e il piů vecchio
-- 
Herbie

 vecchio 
Per questo ci sono gli altri test di find che 
controllano i timestamp.

Herbie scrisse:


Herbie scrisse:


controllano i timestamp cmin, amin, mtime etc.

 Non vuoi leggere i manuali?
Guarda, ti dico molto chiaramente perché ho scritto qui.
Mi sono un po' scordato lo scripting linux pur avendoci smanettato
discretamente in passato.
Per cui ho postato qui credendo che ignorassi una soluzione "banale".
Ma evidentemente non c'è, o almeno ancora nessuno l'ha tirata fuori.
E allora non c'è problema, faccio da me, forse in python (sono più
abituato ai linguaggi "normali" che all'uso combinato di comandi di 
base).
A me non pare, come concetto di base, che find possa risolvere questo
problema, essendo orientato alla ricerca e selezione di file su
criteri "predefiniti". 
-- 
Herbie

 vecchi.
Dovrebbe essere, ma non ho provato l'ultima parte:
ls -t | tail +11 | xargs rm
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

 e selezione di file su criteri "predefiniti".
A me paiono chiare due cose:
1) Herbie non sa di cosa sta parlando.
2) Herbie farebbe meglio a leggere Topolino.
Ma poiche` nessuno e` infallibile ed anche io 
ho dimenticato un -exec ecco come cancellere 
i file piu`vecchi di una ora:
find somedir -mmin +60 -exec rm {} \;

 ls -t | tail +11 | xargs rm
Era quello che avevo in mente io, ma ero convinto (tanto da non provarlo
neanche) che se ci fossero state meno linee sarebbe stato elencato
tutto, ma non e' cosi'.
La soluzione corretta e'
ls -t | tail -n +11 | xargs rm
-- 
Herbie

 find somedir -mmin +60 -exec rm {} \;
Non era questo il problema, ma ti ringrazio per il tempo speso.
-- 
Herbie


Se abbiamo il numero di files che vuoi conservare in n e siamo nella
directory da "ripulire":
f=$((`ls -t | wc -l`))
[ "$f" \> "$n" ] && \
   ls -t | tail -$(($f - $n)) | while read f; do rm -f "$f"; done
Un po' macchinoso ma funge...
Ciao,
-- 
        Roberto Divia`              Love at first sight is one of the greatest
Dep:PH Bat:53 Mailbox:C02110      labour-saving devices the world has ever seen
Route de Meyrin 385               ---------------------------------------------
Case Postale                                Phone:  
+41-22-767-4994
CH-1211 Geneve 23 CERN                      Fax:    
+41-22-767-9585
Switzerland                                 E-Mail: 
Robert...@cern.ch

 Idee?
Aggiungo la mia :)
-- test.py --
#!/usr/bin/env python
import os
import sys
lf = sorted([x for x in os.listdir('.')],
            lambda x,y:cmp(os.stat(x)[9],os.stat(y)[9]),
            reverse=True)
for f in lf[int(sys.argv[1]):]:
    os.unlink(f)
--- end ---
eriol@mornie:~/tmp/test$ ls -t
test.py  tttt  test.py~  001  zxz
eriol@mornie:~/tmp/test$ ./test.py -2
eriol@mornie:~/tmp/test$ ls -t
test.py  tttt  test.py~
-- 
 Eriol - *p = NULL; - EIBTI
 GPG Key ID 0B7C8A19
 
http://blog.mornie.org

 tail -1`
Se individua i  file che ti interessano puoi  aggiungere una -delete o
-exec rm {} \;
-- 
 /\           ___
/___/\_|_|\_|__|___Gian Uberto Lauri_____
  //--\| | \|  |   Integralista GNUslamico
\/                 e coltivatore diretto di Software