¿Cómo borro archivos viejos de un directorio mientras mantengo los más recientes en Windows[duplicado]?
file maintenance (6)
Posible duplicado:
Archivo por lotes para eliminar archivos anteriores a N días
Quiero ejecutar una tarea de Windows programada que borre todos los archivos de un directorio que tenga más de 2 semanas.
La razón es que estos son registros de IIS y Tomcat que llenan mi servidor, pero quiero guardar los registros más recientes en caso de que necesite investigar un problema.
¿Alguien sabe una manera fácil de hacer esto?
Aclamaciones
Nige
¿Por qué no escribe un archivo por lotes o un script de PowerShell y lo programa?
Script para eliminar archivos anteriores a una fecha especificada.
Con VBScript, adaptado de Scripting Answers
Dim fso, startFolder, OlderThanDate
Set fso = CreateObject("Scripting.FileSystemObject")
startFolder = "E:/temp" '' folder to start deleting (subfolders will also be cleaned)
OlderThanDate = DateAdd("d", -07, Date) '' 07 days (adjust as necessary)
DeleteOldFiles startFolder, OlderThanDate
Function DeleteOldFiles(folderName, BeforeDate)
Dim folder, file, fileCollection, folderCollection, subFolder
Set folder = fso.GetFolder(folderName)
Set fileCollection = folder.Files
For Each file In fileCollection
If file.DateLastModified < BeforeDate Then
'' fso.DeleteFile(file.Path) # Modify this to delete after testing
WScript.StdOut.WriteLine (file.Path)
End If
Next
Set folderCollection = folder.SubFolders
For Each subFolder In folderCollection
DeleteOldFiles subFolder.Path, BeforeDate
Next
End Function
Puede ejecutar este script con CScript
@Jason: buena utilidad, FORFILES del Resource Kit
Es bastante trivial si tienes un perl (o similar) instalado en el servidor:
#!perl
foreach my $file (</path/to/logs/*.log>) {
next unless -M $file > 14;
print "Deleting $file.../n";
# unlink $file or die "Failed to remove $file: $!";
}
La línea que realmente hace la eliminación está comentada, ya que puede haber niños en la casa :)
La forma más simple sería ejecutar un archivo .bat semanalmente o mensualmente.
cd /mylog/dir
mkdir archive
del /Q ./archive/*.log
move *.log ./archive
Si desea algo más complejo, busque la descarga de las herramientas de cygwin para usar comandos de tipo * x like, o posiblemente busque en Powershell.
Programe un archivo por lotes para manejar esto.
Esta línea eliminará todos los archivos (*. *) En c: / mydirectory que tengan más de 14 días:
FORFILES -pc:/mydirectory -s -m*.* -d-14 -c"DEL @FILE"
Ponlo en un archivo de texto, renómbralo a algo como "deletefiles.bat" y programalo.
No lo he probado, pero debería ser lo suficientemente fácil de probar.
EDITAR: Si usas esto, asegúrate de que entiendes lo que está sucediendo: el indicador -s indica que debe recurrir a los subdirectorios, y eso puede no ser lo que quieres que suceda. Además, es posible que también deba especificar algunos indicadores para el comando DEL. :)
EDITAR: se dio cuenta de que necesita descargar cosas de Microsoft para que FORFILES funcione. También me gusta la solución aceptada, ya que no tienes que tener nada especial. El único problema es que solo ocurre cada dos semanas en lugar de ejecutar un proceso todos los días para eliminar todo lo anterior a 14 días. Por lo que eso vale. :PAG
sintaxis exacta: FORFILES /pd:/new /d -30 /m * /c "cmd /c del @file"