Sim, os blocos são melhores, pois são usados no disco físico, mas você precisa obtê-los de uma maneira diferente
Use o os.stat field st_blocks * 512 . link
os.stat(path)
Perform the equivalent of astat()system call on the given path. (This function follows symlinks; to stat a symlink uselstat().)On some Unix systems (such as Linux), the following attributes may also be available:
st_blocks- number of 512-byte blocks allocated for filest_blksize- filesystem blocksize for efficient file system I/O
Geralmente, você terá um tamanho como um múltiplo de st_blksize , a menos que você esteja usando um desses novos sistemas de arquivos que podem ter tamanhos de blocos variáveis ou duplicados. Você esperaria que o desdobramento dos sistemas de arquivos fosse contabilizado na contagem de blocos pela implementação do sistema de arquivos, mas pensando nisso, o dupe é como links físicos / físicos, mas para dados físicos. Talvez o FS pudesse dividir os blocos em todos os arquivos, ou apenas reportar blocos para um único arquivo ?? Provavelmente não.
Você também precisa considerar os links físicos / físicos. Atualmente, você adicionará o tamanho do alvo dos links (tente lstat para esses links).
Uma maneira simples de duplicar hard links é dividir o tamanho do bloco pelo número de hard links ( st_nlink ), então, em um drive total, você só conta o inode uma vez, senão você tem que rastrear os números de inode.
A menos que você esteja em um exercício de aprendizado ... como Ouki menciona, use du , já que outras pessoas já pensaram sobre essas coisas.