2011-11-10 33 views
5

Sé cómo enumerar todos los subdirectorios y archivos en un árbol de directorios. Pero estoy buscando la manera de listar todos los archivos recién creados, modificados y (si es posible) archivos eliminados en todos los directorios en un árbol de directorios comenzando desde el directorio raíz.Código de Python para encontrar todos los archivos recién creados, modificados y eliminados en todos los directorios/subdirectorios desde/directory

+0

Especifique qué se acaba de crear es para usted. En la última hora? ¿El ultimo dia? ¿Desde un año? Si sabe cómo crear un árbol de directorios, ¿por qué no usa 'os.lstat' para acceder a las propiedades del archivo? – hochl

+0

Dentro de la última hora ... – nsh

+0

, luego use 'st = os.lstat (filepath)' y el campo 'st.st_mtime' y compruebe si la diferencia a la hora actual es inferior a 1800, eso es todo. – hochl

Respuesta

11

Usted puede encontrar todos los archivos creados o modificados en la última media hora mirando el "mtime" de cada archivo:

import os 
import datetime as dt 

now = dt.datetime.now() 
ago = now-dt.timedelta(minutes=30) 

for root, dirs,files in os.walk('.'): 
    for fname in files: 
     path = os.path.join(root, fname) 
     st = os.stat(path)  
     mtime = dt.datetime.fromtimestamp(st.st_mtime) 
     if mtime > ago: 
      print('%s modified %s'%(path, mtime)) 

Para generar una lista de archivos eliminados, usted también tiene que tener una lista de archivos hace 30 minutos.


Una alternativa más robusta es utilizar un sistema de control de revisión como git. Hacer una confirmación de todos los archivos en el directorio es como hacer una instantánea. Luego, el comando

git status -s 

mostrará una lista de todos los archivos que han cambiado desde la última confirmación. Esto mostrará una lista de los archivos que también se han eliminado.

+0

Al ejecutar el código anterior, aparece el siguiente error: Traza (última llamada más reciente): Archivo "tsck.py", línea 13, ¿en? imprimir ('{p} modificado {m}'. Formato (p = ruta, m = mtime)) AttributeError: el objeto 'str' no tiene ningún atributo 'formato' – nsh

+0

Hay tan lento, podemos encontrar otra manera, activar el sistema para registrar los archivos que se crearon recientemente, y luego analizar los archivos de registro. o mejor manera es agregar un desencadenador para la nueva entrada de registro. ¡Puede ayudar! – pylover

+0

@nsh: 'str.format' se introdujo en Python2.6. Para una versión anterior, puede usar el formato de cadena '% s'-style. Editaré mi publicación para mostrar lo que quiero decir. – unutbu

0

Tome un vistazo a "hombre a encontrar"

crear un archivo temporal para comparar

ejemplo:

find/-type f -newerB tempFile

alguna parte del hombre encontrar

-newerXY reference 
      Compares the timestamp of the current file with reference. The reference argument is normally the name of a file (and one 
      of its timestamps is used for the comparison) but it may also be a string describing an absolute time. X and Y are place‐ 
      holders for other letters, and these letters select which time belonging to how reference is used for the comparison. 

      a The access time of the file reference 
      B The birth time of the file reference 
      c The inode status change time of reference 
      m The modification time of the file reference 
      t reference is interpreted directly as a time 
1
from tempfile import mkstemp 
import shutil 
import os 
import datetime as dt 
import sys 


# gets the time frame we are going to look back and builds a placeholder list to passover the info from our mtime to slay 
now=dt.datetime.now() 
ago=now-dt.timedelta(minutes=480) 
passover=[] 

# the '.' is the directory we want to look in leave it to '.' if you want to search the directory the file currently resides in 
for root,dirs,files in os.walk('.'): 
    for fname in files: 
     path=os.path.join(root,fname) 
     st=os.stat(path) 
     mtime=dt.datetime.fromtimestamp(st.st_mtime) 
     if mtime>ago: 
      passover.append(path) 


def slay(file_path, pattern, subst): 
    #Create temp file 
    fh, abs_path = mkstemp() 
    with open(abs_path,'w') as new_file: 
     with open(file_path) as old_file: 
      for line in old_file: 
       new_file.write(line.replace(pattern, subst)) 
    old_file.close() 
    #Remove original file 
    os.remove(file_path) 
    #Move new file 
    try: 
     shutil.move(abs_path, file_path) 
    except WindowsError: 
     pass 

#we pass the passover list to the slay command in a for loop in order to do muiltple replaces in those files. 
for i in passover: 
    slay(i,"String1","String2") 
+0

Lo construí para buscar en un directorio y seleccionar los archivos modificados en el último período de tiempo y luego reemplazar el texto en esos archivos. Este guión no estaba por ahí y tuve que reconstruirlo a partir de la respuesta anterior, así que pensé que alguien más podría venir a buscarlo. – Powerboy2

+0

Por favor edite su respuesta con esta información. Además, una respuesta completa debe tener unas líneas que describan lo que hace. Lea el siguiente artículo: [¿Cómo escribo una buena respuesta?] (Http://stackoverflow.com/help/how-to-answer) – Mariano

Cuestiones relacionadas