Asegúrese de que su pwd sea el directorio correcto para eliminar los archivos (suponiendo que solo haya caracteres regulares en el nombre del archivo):
ls -A1t | tail -n +11 | xargs rm
mantiene los 10 archivos más nuevos. Lo uso con el programa de cámara 'motion' para mantener los archivos de captura de fotogramas más recientes. Gracias a todas las respuestas anteriores porque me mostraron cómo hacerlo.
find
es la herramienta común para este tipo de tarea:
find ./my_dir -mtime +10 -type f -delete
EXPLICACIONES
./my_dir
su directorio (reemplace con el suyo propio)-mtime +10
más de 10 días-type f
solo archivos-delete
No sorpresa. Elimínelo para probar sufind
filtro antes de ejecutar todo el comando
Y cuida que ./my_dir
existe para evitar malas sorpresas !
La forma correcta de hacer este tipo de cosas es con logrotate
.
Prueba esto:
ls -t | sed -e '1,10d' | xargs -d '\n' rm
Esto debería manejar todos los caracteres (excepto las líneas nuevas) en un nombre de archivo.
¿Qué está pasando aquí?
ls -t
enumera todos los archivos en el directorio actual en orden decreciente de tiempo de modificación. Es decir, los archivos modificados más recientemente son los primeros, un nombre de archivo por línea.sed -e '1,10d'
borra las primeras 10 líneas, es decir, los 10 archivos más nuevos. Yo uso esto en lugar detail
porque nunca puedo recordar si necesitotail -n +10
otail -n +11
.xargs -d '\n' rm
recopila cada línea de entrada (sin la nueva línea de terminación) y pasa cada línea como argumento arm
.
Como con cualquier cosa de este tipo, experimente en un lugar seguro.