He estado tratando de encontrar la forma de recuperar (rápidamente) la cantidad de archivos en una unidad HFS + dada con python.¿Cómo se determina el número de archivos en una unidad con Python?
He estado jugando con os.statvfs y tal, pero no puedo conseguir nada (eso me parece útil).
¿Alguna idea?
Editar: Déjame un poquito más específico. =]
Estoy escribiendo un contenedor tipo timemachine alrededor de rsync por varias razones, y me gustaría obtener una estimación muy rápida (no tiene que ser perfecta) de la cantidad de archivos en la unidad que rsync va a escanear. De esta forma puedo ver el progreso desde rsync (si lo llamas como rsync -ax --progress
, o con la opción -P
) a medida que construye su lista de archivos inicial, e informa un porcentaje y/o ETA de vuelta al usuario.
Esto está completamente separado de la copia de seguridad real, lo cual no es problema para seguir el progreso. Pero con las unidades en las que estoy trabajando con varios millones de archivos, significa que el usuario está mirando un contador de la cantidad de archivos que suben sin límite superior durante unos minutos.
He intentado jugar con os.statvfs exactamente con el método descrito en una de las respuestas hasta ahora, pero los resultados no tienen sentido para mí.
>>> import os
>>> os.statvfs('/').f_files - os.statvfs('/').f_ffree
64171205L
La forma más portátil a mi alrededor de 1,1 millones da en esta máquina, que es el mismo que cualquier otro indicador que he visto en esta máquina, incluyendo rsync funcionando sus preparativos:
>>> sum(len(filenames) for path, dirnames, filenames in os.walk("/"))
1084224
Tenga en cuenta que el primer método es instantáneo, mientras que el segundo me hizo volver 15 minutos después para actualizar porque tardó tanto tiempo en ejecutarse.
¿Alguien sabe de una manera similar de obtener este número, o qué hay de malo en cómo estoy tratando/interpretando los números de os.statvfs?
¿Cómo varía la salida de os.statvfs [os.B_FILES] de lo esperado? (Si pudiera pegar resultados de muestra de os.statvfs y explicar * por qué * no es útil, eso ayudaría a las personas que no conocen OS X a que lo ayuden). –
@Charles: He actualizado mi pregunta con algunos detalles reales ahora ... –
Puede usar un número de una ejecución de rsync anterior. Es rápido, portátil, y para archivos 10 ** 6 y cualquier estrategia de respaldo razonable, le dará una precisión del 1% o superior. – jfs