给车车上拷贝一些音乐,结果发现 U 盘里有好些重复的歌,自己手动去删除实在太累了,索性就让数字员工活动活动筋骨吧,要不然它们就要荒废了!
上需求:
使用 go 语言开发一款 CLI,名叫:dedup,deduplication(去重)的缩写。 功能是用来删除指定文件夹下的重复文件,多个文件重复,应当只保留一份。
- 运行后,先给出重复文件的列表清单,标记哪些重复的文件需要被删除,标记保留下来的文件,供用户浏览,在用户确认后,删除标记的多余的重复文件。
- 比较重复文件时,应当先比文件的大小,如果完全相同的,再对比 MD5 和 CRC32,确保是同一个文件,不必每个都要比 MD5 和 CRC32,这样可以有效提高性能。
- 加入一个按照后缀名来过滤文件的功能,比如:
dedup -t ".mp3" ./就是对当前目录下,只针对所有以 .mp3 后缀名结尾的文件进行去重。比如:dedup -t ".mp3|.jpg|.png" ./就是对当前目录下,只针对所有以 .mp3 和 .jpg 和 .png 后缀名结尾的文件进行去重。 - 加入一个选项 -y 表示无须用户确认,直接去重。
- 加入一个选项 -r 表示处理该目录下的所有文件,包括子孙后代所有目录的文件。
- 加入一个选项 -m 表示去重时所使用的哈希方法,-m all 表示同时使用所有的哈希方法校验文件是否相同,-m crc32 表示只使用 CRC32 来比较文件是否相同,-m md5 表示只使用 MD5 来比较文件是否相同。
很快啊,年轻的数字员工就是不一样,直接做好了:
如果想直接使用,需要在环境变量中配置一下路径。
快速开始
- Windows 下可以直接把
dedup.exe复制扔到C:\Windows\System32目录下。 - Linux 下可以直接把
dedup甩到/usr/bin目录下。
然后就可以敲命令啦:
# 仅使用 CRC32 方法扫描当前目录及其后代目录下的所有文件
dedup -r -m crc32 .
# 如果不放心 CRC32 方法来检测重复文件,可以同时开启所有哈希方法来检测,不过这样比较耗时
dedup -r .
# 注意啊,上面的命令最后都有个小点,这个英文的句号表示当前目录,与 ./ 是一个意思。
# 如果打的是 /,就要特别特别注意了啊,这个是根目录的意思,别直接把系统给干死了……
开源
我把项目开源了,可以在下方链接找到。
国内:
https://gitee.com/ationlove/dedup
国外:
https://github.com/ationlove/dedup
编译好的放在了 release 中: