基本循环的文档:
import glob
import hashlib
uniq = set()
for fname in glob.glob('*.txt'):
with open(fname,"rb") as f:
sig = hashlib.sha256(f.read()).digest()
if sig not in uniq:
uniq.add(sig)
print fname
else:
print fname, " (duplicate)"
请注意与任何哈希函数存在的collision轻微的机会。这是两个具有相同摘要的不同文件。根据你的需要,这是不可接受的。
根据Thomas Pornin in an other answer:
“例如,与SHA-256(N = 256)和一个十亿消息(P = 10),则概率[碰撞]约为4.3 * 10 -60。“
鉴于你的需要,如果你有为了识别“真”的重复,改变sig = ....
行任何适合你检查的附加属性。例如,如果您需要检查“相同的内容”,并(通过os.stat()
返回st_uid
)“相同的所有者”,写:
sig = (hashlib.sha256(f.read()).digest(),
os.stat(fname).st_uid)
使用[hashlib](https://docs.python.org/3/library/hashlib.html)就足够了吗? – bvidal 2014-09-01 14:36:09
_“检查每个元数据”_什么是你的“重复”?相同的内容?或相同的内容和相同的元数据(哪些?) – 2014-09-01 14:39:50
什么是你的操作系统? – Kasramvd 2014-09-01 14:46:03