whatshotGolang 文件去重 - 支持多平台 Windows、Linux、MacOS

@Ta 02-12 17:44 1023点击

GitHub 地址:https://github.com/PrintNow/FileDeduplication

已编译好二进制文件:https://www.lanzous.com/b00z87aja


FileDeduplication | 文件去重

使用 Go 语言实现的文件去重,单线程
内存占用,越到后面可能占用越大,扫描777个文件到后期内存占用达到 100~150 MB
刚入门 Go,可能有很多不规范的、冗余的代码,接受指正

实现思路

遍历文件下所有文件,计算文件 MD5值,然后压入 map,map 结构大概是这样的

  key    :  value
------------------
文件路径 : 文件MD5值

然后根据当前 计算的 MD5值 在 map 中寻找,如果找到了,就判定文件有重复
将当前 重复文件路径,写入到 重复文件清单

删除重复文件:
按行读取 重复文件清单,然后执行删除操作

安装

使用编译好的二进制文件可以忽略这一步
已编译好二进制文件:https://www.lanzous.com/b00z87aja

下载 fileCheck.go 文件,然后安装 go 环境进行编译

执行以下命令

go build fileCheck.go

编译完成你将得到一个 二进制文件

  • Windows 平台 将得到一个名为 fileCheck.exe 二进制文件
  • Linux、Android 平台 将得到一个名为 fileCheck 二进制文件
  • ...

使用

这里以 Windows 平台为例

E:\awesomeProject>fileCheck -h
Usage of file_check:
  -de string
        需要删除重复文件的清单
  -dn string
        需要检查重复文件的路径,如 A:\CloudMusic,路径最后面建议不要带 \ 或 / (default "./")

查询重复文件

基本语法:fileCheck -dn "需要查重的文件夹"

实例:

fileCheck -dn "A:\公共音乐"

查询完成后,如果没有重复文件,将显示如下信息:

E:\awesomeProject>fileCheck -dn "A:\公共音乐"
92a20dcf766db2f9ecb2a54740b4dbb8        A:\公共音乐/马頔 - 南山南.MP3
f5ffdf3d7d446ae0f163ace933dfd2a4        A:\公共音乐/马頔 - 皆非.mp3
......
067968ad7e563925eb462e2bd0e515c2        A:\公共音乐/齐一 - 这个年纪.flac
9fa20140df5805b14fb605c5cc1f58bb        A:\公共音乐/내가 설렐 수 있게 - Apink.flac
扫描完成,共扫描 16 文件,有 0 文件重复,耗时:0s

查询完成后,如果有重复文件,将显示如下信息:

E:\awesomeProject>fileCheck -dn "A:\公共音乐"
47617b7b37e5e006b490f405b7e55a72        A:\公共音乐/颜人中 - 有可能的夜晚.flac
fd2609dc9ad3c0ad66a6da8e0f074b87        A:\公共音乐/魔鬼中的天使 - 田馥甄.flac
  文件名:A:\公共音乐/马頔 - 南山南.MP3
重复路径:A:\公共音乐/马頔 - 南山南 (1).MP3

f5ffdf3d7d446ae0f163ace933dfd2a4        A:\公共音乐/马頔 - 皆非.mp3
......
067968ad7e563925eb462e2bd0e515c2        A:\公共音乐/齐一 - 这个年纪.flac
9fa20140df5805b14fb605c5cc1f58bb        A:\公共音乐/내가 설렐 수 있게 - Apink.flac
扫描完成,共扫描 777 文件,有 1 文件重复,耗时:395s
重复文件清单路径:A:\公共音乐/1581495121_delete_list.txt

删除重复文件

自己手动检查 重复文件清单路径 后,如果有问题的,可以自己修改路径,格式是一行一个文件绝对路径

基本语法:fileCheck -de "重复文件清单路径"

E:\awesomeProject>fileCheck -de "A:\公共音乐\1581495121_delete_list.txt"
[删除成功]A:\公共音乐/G.E.M. 邓紫棋 - 喜欢你 [mqms2].mp3
[删除成功]A:\公共音乐/马頔 - 南山南.MP3
[删除成功]A:\公共音乐/Gamper & Dadoni Ember Island - Creep (1).mp3
[删除成功]A:\公共音乐/Groove Coverage - Far Away from Home (1).MP3
[删除成功]A:\公共音乐/JC - 说散就散.mp3
[删除成功]A:\公共音乐/Taylor Swift - Look What You Made Me Do (1).MP3
[删除成功]A:\公共音乐/Vicetone Cozi Zuehlsdorff - Nevada (feat. Cozi Zuehlsdorff) (1).MP3
[删除成功]A:\公共音乐/Vicetone Cozi Zuehlsdorff - Nevada (feat. Cozi Zuehlsdorff).MP3
[删除成功]A:\公共音乐/Wiz Khalifa Charlie Puth - See You Again (feat. Charlie Puth).mp3
[删除成功]A:\公共音乐/周冬雨 - 不完美女孩 [mqms2].mp3
[删除成功]A:\公共音乐/好妹妹 - 往事只能回味.MP3
[删除成功]A:\公共音乐/好妹妹 - 月.MP3
[删除成功]A:\公共音乐/岑宁儿 - 追光者 [mqms2].mp3
[删除成功]A:\公共音乐/徐佳莹 - 湫兮如风 [mqms2].mp3
[删除成功]A:\公共音乐/李易峰 - 年少有你 [mqms2].mp3
[删除成功]A:\公共音乐/杨宗纬 - 越过山丘 [mqms2].mp3
[删除成功]A:\公共音乐/Ryan.B AY楊佬叁 - 再也没有.mp3
[删除成功]A:\公共音乐/赵英俊 - 守候 [mqms2].mp3
[删除成功]A:\公共音乐/赵雷 - 成都 [mqms2].mp3
[删除成功]A:\公共音乐/是阿涵阿 - 过客.mp3
[删除成功]A:\公共音乐/是阿涵阿 王冕 - 讨厌你.mp3
[删除成功]A:\公共音乐/陈雪凝 - 我唯一青春里的路人.MP3
[删除成功]A:\公共音乐/鲤 仙灵女巫果妹 - Russ - 早安少女 (Psycho remix)(鲤   台灯家的果妹 remix) (1).mp3

红米 Note4X 标配版(黑色)

回复列表(9)
  • @Ta / 02-12 18:28
    💪😸
  • @Ta / 02-13 10:35

    whatshot
    WAP站长之家(wap.ac

  • @Ta / 02-13 10:35

    whatshot
    WAP站长之家(wap.ac

  • @Ta / 02-13 10:42

    What's Hot
    红米Note4超高配版(银色)

  • @Ta / 02-13 12:33

    @水木易安@呆哥
    Because Tiger think that is ok
    红米 Note4X 标配版(黑色)

  • @Ta / 02-13 13:36
    @NowTime,无语了。应该遍历扫描
    发现重复的结果然后确认是都删除 删除后打印原文件和删除后的记录到TXT
  • @Ta / 02-13 16:10

    @罐子,没怎么看懂你说的,我的意图是扫描出重复的文件,然后记录到 TXT,然后自己打开再次检查确认下,然后再执行命令 根据清单 进行删除文件。

    你的意思是想把扫描结果导出到一个文件里面?重复的导出到另外一个文件?
    红米 Note4X 标配版(黑色)

  • @Ta / 02-13 18:11
    @NowTime,小建议:
    可以把重复的文件移动到指定文件夹,备份也好、重新整理也好。
    删除的话可选择按文件的修改时间来。我是一名斗者,我正在被一名斗帝追杀,但我一点都不慌,因为他的马没我快,架!!!
  • @Ta / 02-14 12:02

    @姑娘等等丶,我觉得你这个在 CUI 程序里行不通(或许我水平还不够),你这个需要写成 GUI程序就比较好实现。
    因为将重复文件移动到某个文件夹,文件数量少还可以,但是文件数量多了以后可能会造成磁盘堵塞(猜的)

    我现在在修改,将相同文件的路径,写在一个文件里,按 \n\n 区别开不同的文件,例如:

    E:\GitHub Project\LearnGolang\文件去重\test/1.txt
    E:\GitHub Project\LearnGolang\文件去重\test/3.txt
    E:\GitHub Project\LearnGolang\文件去重\test/4.txt
    E:\GitHub Project\LearnGolang\文件去重\test/2.txt
    
    E:\GitHub Project\LearnGolang\文件去重\test/5.txt
    E:\GitHub Project\LearnGolang\文件去重\test/6.txt
    
    E:\GitHub Project\LearnGolang\文件去重\test/8.txt
    E:\GitHub Project\LearnGolang\文件去重\test/10.txt
    

    然后我的想法是这样的:
    你想不想删除的文件,你就在该文件中去除这个路径,留下的代表你是想要删除的
    这样的话操作可能方便一些

    还有就是可以由用户选择 抽奖式 删除文件,只保留一个文件

    如果还有其他想法(不算很难的),欢迎补充
    红米 Note4X 标配版(黑色)

添加新回复
回复需要登录

[聊天-此处没有老虎] 呆哥: 明盘域名出售页:XXS.ME