2009-09-15 20 views
5
# find /home/shantanu -name 'my_stops*' | xargs ls -lt | head -2 

Il comando di cui sopra elencherà gli ultimi 2 file che hanno my_stops nel suo nome. Voglio conservare questi 2 file. Ma voglio cancellare tutti gli altri file che iniziano con "my_stops" dalla directory corrente.rimuovere i vecchi file di backup

risposta

13

Se si crea copie di backup su base regolare, può essere utile utilizzare l'opzione -atime di trovare così solo i file più vecchi di vostri ultimi due backup possono essere selezionati per l'eliminazione .

per i backup giornalieri si potrebbe utilizzare

$ find /home/shantanu -atime +2 -name 'my_stops*' -exec rm {} \; 

ma un'espressione diversa (diverso -atime) potrebbe adattarsi meglio.

Nell'esempio ho usato +2 per indicare più di 2 giorni.

+2

"2" significa esattamente due. Se vuoi "più vecchio di" devi usare "+2". –

+0

Buon punto! si, usa +2 – pavium

+2

Non potresti usare anche "-delete"? – Duke

1

Vedi here

(ls -t|head -n 2;ls)|sort|uniq -u|xargs rm

1

che vi mostrerà dalla seconda linea in avanti;)

find/home/Shantanu -name 'my_stops *' | xargs ls -lt | tail -n +2

Basta tenere a mente che trovano è ricorsiva;)

+0

Puoi usare '-maxdepth' per controllare la ricorsione. –

4

Ecco una soluzione non ricorsiva:

ls -t my_stops* | awk 'NR>2 {system("rm \"" $0 "\"")}' 

Spiegazione:

  • Le liste comando ls file con gli ultimi 2 in cima
  • Il comando awk indica che per quelle righe (NR = numero di record, cioè righe) maggiore di 2, eliminarli
  • Le virgolette sono necessarie nel caso in cui i nomi dei file contengono spazi
0

Senza approccio ricorsivo:

find /home/folder/ -maxdepth 1 -name "*.jpg" -mtime +2 
+0

Puoi dare alcuni commenti all'OP per spiegare cosa stai facendo e perché? – theJollySin

Problemi correlati