Mantener un directorio circular con X ficheros, eliminando los más antiguos

Iniciado por genosida, 5 Septiembre 2019, 16:56 PM

0 Miembros y 1 Visitante están viendo este tema.

genosida

Buenas tardes

ante todo presentarme y agradeceros que dediquéis una parte de vuestro tiempo a leer mi consulta.

Por no enrollarme más: necesito mantener un directorio "circular" de con un nº fijo de ficheros. Cada hora un script añade un nuevo fichero y, lo que se debería hacer es, si se supera el límite de ficheros, eliminar el más antiguo.

No depende de la fecha (si fuera así, no estaría aquí planteándolo, pues es relativamente sencillo).

Esto es para un servidor Windows.

Si a alguien se le ocurre una solución, le estaré muy agradecido.

Un saludo

EdePC

Saludos,

- Eliminar el más antiguo con respecto a que fecha? Creación, Modificación o Acceso? No depende de la fecha? entonces como sabes que es más antiguo?

genosida

Hola

quizá no me he expresado bien.

Yo lo que quiero es mantener los útimos 50 ficheros, por ejemplo. Sin importar la fecha que tengan.

Si se añade uno más, necesito que se borre el más antiguo.

Saludos

tincopasan

como no decís en que lenguaje, una idea genérica sería ingresar el mombre de cada archivo en un array de 50 elementos, al agregar un archivo se agrega al último y se puede eliminar el primero.

EdePC

- Ahí Tincopasan te ha dado una idea, yo para irme por otra rama revisaría la fecha de creación, esta fecha aparece o actualiza cuando el fichero o carpeta aparece en un lugar, ya sea cuando se pega desde otro lado o se crea manualmente.

-- Esto sería bastante fácil con un For, puedes revisar si te convence, o si prefieres otro método:

Citarc:\Users\EdSon\Desktop>For /f "tokens=* skip=30" %a In ('Dir /b /a:-D /o:-d /t:c') Do @Echo %a
exiftool(-k).exe
dm
cmd_xp.exe
ffmpeg-GIF.cmd
ffmpeg-palettegen.cmd
GIF Movie Gear.lnk
ScreenToGif.exe
8.jpg
dokumen.site_seguridad-informatica-enidocx.pdf
jasperreports-ultimate-guide-3v2_0.pdf
JS2BBCode.html
HTML2BBCode.html
AnyDesk.exe
IrfanView 64.lnk
pingo.exe
Windows7 Shortcuts eBook.zip
e-books.lnk
VirtualDub.lnk

c:\Users\EdSon\Desktop>

- Lo que hace es hacer un Dir para mostrar solo los nombres de archivo (/b) de la carpeta actual, no carpetas/directorios (/a:-D), ordenados por fechas (/o) del más nuevo al más viejo (/o:-d) considerando las fechas de Creación (/t:c).

- El For utiliza el resultado del Dir considerando nombres de archivos con espacions (tokens=*) y obviando los primeros 30 archivos (skip=30) (en tu caso poner 50) para la variable %a (en batch usar %%a) e imprimir en pantalla el nombre de dicho archivo (@echo %a)

- Siempre se prueba primero, luego puedes cambiar el @Echo %a por un Del /f %a para eliminar

genosida

Muchas gracias a todos.

Lo analizo a ver si me puede servir.

Saludos

genosida

EdePC: Tu solución me viene de perlas.

Muchas gracias amigo.

Un saludo.