2011-08-27 42 views
8

Soy un poco nuevo en python y he estado tratando de resolver esto solo, pero solo obteniendo fragmentos hasta ahora. Básicamente, estoy buscando un script que buscará recursivamente un directorio y sus subdirectorios, y eliminará los archivos que tengan al menos 24 horas de antigüedad pero no alterará los directorios. Cualquier consejo o ejemplos son muy apreciados.Python - eliminar archivos antiguos

Gracias

+2

¿Qué has intentado hasta ahora y qué hace mal? – Mark

+0

Veamos los pedazos, ¿quizás podemos ayudar a unir los dos? – Johnsyweb

+1

No puede eliminar archivos de un directorio sin alterar el directorio. –

Respuesta

5

Si es necesario comprobar todos los archivos en todos los directorios de forma recursiva, algo como esto debería hacer:

import os, time 

path = "/path/to/folder" 
def flushdir(dir): 
    now = time.time() 
    for f in os.listdir(dir): 
     fullpath = os.path.join(dir, f) 
     if os.stat(fullpath).st_mtime < (now - 86400): 
      if os.path.isfile(fullpath): 
       os.remove(fullpath) 
      elif os.path.isdir(fullpath): 
       flushdir(fullpath) 

flushdir(path) 
28

Esto utiliza el método os.walk para buscar recursivamente un directorio. Para cada archivo, comprueba la fecha de modificación con os.path.getmtime y la compara con datetime.now (la hora actual). datetime.timedelta está diseñado para crear un timedelta de 24 horas.

Busca en el directorio os.path.curdir que es el directorio actual cuando se invoca el script. Puede establecer dir_to_search en otra cosa, p. un parámetro para el script

import os 
import datetime 

dir_to_search = os.path.curdir 
for dirpath, dirnames, filenames in os.walk(dir_to_search): 
    for file in filenames: 
     curpath = os.path.join(dirpath, file) 
     file_modified = datetime.datetime.fromtimestamp(os.path.getmtime(curpath)) 
     if datetime.datetime.now() - file_modified > datetime.timedelta(hours=24): 
      os.remove(curpath) 
Cuestiones relacionadas