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_dirsu directorio (reemplace con el suyo propio)-mtime +10más de 10 días-type fsolo archivos-deleteNo sorpresa. Elimínelo para probar sufindfiltro 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 -tenumera 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 detailporque nunca puedo recordar si necesitotail -n +10otail -n +11.xargs -d '\n' rmrecopila 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.