Assicurati che il tuo pwd sia la directory corretta per eliminare i file quindi (assumendo solo caratteri regolari nel nome del file):
ls -A1t | tail -n +11 | xargs rm
mantiene i 10 file più recenti. Lo uso con il programma della fotocamera "motion" per conservare i file di cattura dei fotogrammi più recenti. Grazie a tutte le risposte successive perché mi hai mostrato come farlo.
find
è lo strumento comune per questo tipo di attività :
find ./my_dir -mtime +10 -type f -delete
SPIEGAZIONI
./my_dir
la tua directory (sostituiscila con la tua)-mtime +10
più vecchio di 10 giorni-type f
solo file-delete
nessuna sorpresa. Rimuovilo per testare il tuofind
filter prima di eseguire l'intero comando
E fai attenzione a quel ./my_dir
esiste per evitare brutte sorprese !
Il modo corretto per fare questo tipo di cose è con logrotate
.
Prova questo:
ls -t | sed -e '1,10d' | xargs -d '\n' rm
Questo dovrebbe gestire tutti i caratteri (tranne le nuove righe) in un nome di file.
Cosa sta succedendo qui?
ls -t
elenca tutti i file nella directory corrente in ordine decrescente di tempo di modifica. Cioè, i file modificati più di recente sono i primi, un nome file per riga.sed -e '1,10d'
cancella le prime 10 righe, cioè i 10 file più recenti. Uso questo invece ditail
perché non riesco mai a ricordare se ho bisogno ditail -n +10
otail -n +11
.xargs -d '\n' rm
raccoglie ogni riga di input (senza il carattere di fine riga) e passa ogni riga come argomento arm
.
Come con qualsiasi cosa di questo tipo, prova in un posto sicuro.