基于二进制内容检测并清理重复游戏纹理文件方案咨询
批量清理重复二进制文件方案
一、Windows命令行(PowerShell)方案
直接用PowerShell的文件哈希功能,精准识别重复文件:
Get-ChildItem -File | ForEach-Object { $hash = (Get-FileHash -Algorithm SHA256 $_.FullName).Hash [PSCustomObject]@{ Hash = $hash Path = $_.FullName } } | Group-Object -Property Hash | Where-Object { $_.Count -gt 1 } | ForEach-Object { # 预览删除操作,确认没问题后去掉 -WhatIf $_.Group | Select-Object -Skip 1 | Remove-Item -WhatIf }
- 原理:通过SHA256哈希唯一标识文件内容,分组后删除每组中除第一个外的所有重复文件
-WhatIf参数会先输出要删除的文件列表,不会实际删除,确认无误后再移除该参数执行真实删除
二、WSL Linux命令方案
方法1:原生命令组合实现
# 生成所有文件的SHA256哈希列表 find . -type f -exec sha256sum {} \; > hash_list.txt # 排序后筛选出重复的哈希值 sort hash_list.txt | uniq -d -w 64 > duplicate_hashes.txt # 删除重复文件(保留第一个出现的,-i参数用于交互确认) sort hash_list.txt | awk 'BEGIN{prev_hash=""} {if ($1 == prev_hash) {print $2} else {prev_hash=$1}}' | xargs rm -i
方法2:用fdupes工具(更简便)
先安装工具:
sudo apt update && sudo apt install fdupes
执行删除:
fdupes -dN .
-d:标记要删除的重复文件-N:自动保留第一个出现的文件,无需手动选择
三、简单Python脚本方案
自己写个小脚本,灵活控制处理逻辑:
import os import hashlib def get_file_hash(file_path, chunk_size=4096): # 分块读取大文件,避免内存占用过高 sha256 = hashlib.sha256() with open(file_path, 'rb') as f: while chunk := f.read(chunk_size): sha256.update(chunk) return sha256.hexdigest() def remove_duplicates(folder_path): hash_map = {} # 遍历目标文件夹下所有文件(包含子文件夹) for root, _, files in os.walk(folder_path): for file in files: file_path = os.path.join(root, file) file_hash = get_file_hash(file_path) if file_hash in hash_map: print(f"删除重复文件: {file_path}") os.remove(file_path) else: hash_map[file_hash] = file_path if __name__ == "__main__": # 替换成你的纹理文件所在文件夹路径 target_folder = "./texture_files" remove_duplicates(target_folder)
- 特点:支持处理子文件夹,分块读取适合大体积纹理文件;可修改哈希算法(比如换成
hashlib.md5()提升速度,SHA256安全性更高)
内容的提问来源于stack exchange,提问作者eman_not_ava
相关产品推荐
相关产品推荐

