from pathlib import Path
from collections import defaultdict
import hashlib

root = Path('sample_files')
by_size = defaultdict(list)
for path in root.rglob('*'):
    if path.is_symlink() or not path.is_file():
        continue
    by_size[path.stat().st_size].append(path)

for size, paths in by_size.items():
    if len(paths) < 2:
        continue
    by_hash = defaultdict(list)
    for path in paths:
        try:
            digest = hashlib.sha256()
            with path.open('rb') as stream:
                for block in iter(lambda: stream.read(1024 * 1024), b''):
                    digest.update(block)
            by_hash[digest.hexdigest()].append(path)
        except OSError as exc:
            print('跳过无法读取的文件:', path, exc)
    for matches in by_hash.values():
        if len(matches) > 1:
            print('\n相同内容，文件大小:', size)
            for path in matches:
                print(path)
