Número fluctuante de archivos y directorios

Número fluctuante de archivos y directorios

Situación: Tengo un script de Python que contará de forma recursiva y por separado el número total de archivos y directorios. A continuación se muestra el código:

def traverse(top):
    filecount = 0
    dircount = 0
    for root, dirs, files in os.walk(top):
        for f in files:
            if dirs: dircount += 1
            elif files: filecount += 1
            else:
                print("Error")
                break
    print("Num of dir: " + dircount)
    print("Num of files: " + filecount)

Problema: obtengo una cantidad diferente de directorios y archivos casi cada vez que ejecuto el código.

Pregunta: ¿Le importaría sugerir una razón por la cual el número de archivos y directorios fluctuará? ¿Quizás es así como funciona Linux?

Información adicional: Sólo quiero asegurarme, ya que esta parte de mi script es muy importante para todo el programa.

Respuesta1

Un sistema Unix en ejecución creará archivos y directorios temporales de vez en cuando durante el funcionamiento normal.

Es probable que simplemente abrir un archivo en un editor o enviar un correo electrónico cree uno o dos archivos temporales, y navegar por la web puede crear y eliminar cientos de archivos en un corto período de tiempo. Además, un entorno de escritorio gráfico puede realizar almacenamiento en caché y otras cosas que normalmente no notas, lo que crea y elimina archivos temporales.

Dependiendo de cuál sea su directorio principal, es posible que cubra directorios que tienden a cambiar mucho, como /tmpy todos los directorios bajo /vary su directorio de inicio.

Respuesta2

dirs es una lista de nombres de directorios en el directorio actual (raíz) y files es una lista de nombres de archivos en el directorio actual.

Creo que quieres algo más como esto:

def traverse(top):
    filecount = 0
    dircount = 0
    for root, dirs, files in os.walk(top):
        dircount += len(dirs)
        filecount += len(files)
    print("Num of dir: " + dircount)
    print("Num of files: " + filecount)

información relacionada