如何对文件进行查重

2022-09-09 08:06:52 +08:00
 1054850490
如图所示,每个文件都有一个“唯一的标识符”,同样标识符的文件,根据文件大小筛选掉最小的,或者根据“创建时间”筛选出最早的,不考虑自己编程的情况下,市面有没有成形的软件可以处理的?
4149 次点击
所在节点    NAS
25 条回复
whileFalse
2022-09-09 08:36:01 +08:00
这玩意自己写怕是一个小时都用不了…
huang119412
2022-09-09 08:50:36 +08:00
用文件特征值,如 MD5 之类
AX5N
2022-09-09 08:52:38 +08:00
Duplicate Cleaner
r6cb
2022-09-09 08:55:33 +08:00
遍历目录所有文件,存到 map 。key 为唯一标识符,value 为 list 。list 按照那两个要求排序把后面的删掉。十几行代码的事
zxsa
2022-09-09 09:05:10 +08:00
Duplicate Cleaner 5
![dfe641b33681644e86bace24699c3b18.png]( https://www.cap2box.com/images/dfe641b33681644e86bace24699c3b18.png)
gdgoldlion
2022-09-09 09:54:46 +08:00
懒得自己弄,就用 Duplicate Cleaner Pro ,界面好看选项多
yanqiyu
2022-09-09 10:05:19 +08:00
都有天然的分界词 “网页地址” 了,直接写个脚本不会很复杂
deorth
2022-09-09 10:18:01 +08:00
zfs dedup
wxf666
2022-09-09 12:28:58 +08:00
用 shell 写了一个:

功能:查找当前路径下所有 *.webm 文件,以文件名『 xxx 网页地址「 yyy 」.zzz 』中的「 yyy 」为分组依据,输出每组中(文件大小最小)的文件名

find . -name '*.webm' -printf '%s\t%p\n' | jq -Rsr '[capture("(?<size>\\d+)\\t(?<path>.*网页地址(?<key>.+)\\..+)"; "g")] | group_by(.key)[] | sort_by(.size | tonumber)[0].path'
cyningxu
2022-09-09 15:28:38 +08:00
这。。。有发帖的时间怕是代码都写完了吧
cxtrinityy
2022-09-09 17:09:10 +08:00
论 linux 下会 shell 的便利性
loveress01
2022-09-09 17:23:49 +08:00
documentzhangx66
2022-09-09 21:00:46 +08:00
年代不一样了,现在已经不是软件或算法去重的年代了。

Windows Server 2019 直接对磁盘进行去重。

Linux 有 Btrfs 、Ceph ,再不济 Zfs 也行。
1054850490
2022-09-09 22:09:01 +08:00
@yanqiyu 主要是我不会写,懂一点,也只是能看到一点别人写的,自己上手就完全不会了
1054850490
2022-09-09 22:10:02 +08:00
@huang119412 #2 没法对比 md5 ,文件不一样,只是命名趋近一致,但是有唯一标识符
1054850490
2022-09-09 22:21:12 +08:00
@deorth #8 这是比对同样的哈希值的吗?可能不太适合我噢
FrankHB
2022-09-10 11:12:12 +08:00
@documentzhangx66 基于半吊子 FS 元数据的去重,一旦出点意外,恢复数据体验跟屎一样。( Win Server 2012 时代的受害者路过。)现在宁可手动 judpes 。

更重要的是,你看清楚,OP 的场景你这玩意儿根本不顶用。
pickboss
2022-09-10 11:28:01 +08:00
@wxf666 大佬这 shell 脚本写得好溜
documentzhangx66
2022-09-10 12:13:38 +08:00
@FrankHB

你这是吃螃蟹受害了。

根据:
https://docs.microsoft.com/en-us/windows-server/storage/data-deduplication/install-enable

Windows Server 的去重功能,是 Windows Server 2016 才开始正式推广的。你在 Windows Server 2012 就开始用,当然容易出问题。

另外,生产系统,需要做备份。没做备份数据丢了恢复起来当然麻烦。
FrankHB
2022-09-11 01:15:40 +08:00
@documentzhangx66 重要数据当然有备份,所以受害的主要还不是数据,而是时间。

最大的教训是策略方面的问题:要想持久数据(包括文件系统元数据自身,比如文件创建时间)真正可靠,就不要依赖文件系统层次上的半吊子功能,而应该在更高的层次上冗余,因为文件系统暴露给 UI 直接提供的最终用户的功能极其有限,一旦出问题难以短期内选择数据的二进制映像恢复回正常操作状态(有源码的都看的要死,更别提 Windows 上一堆找不到源码的)。文件系统去重只能作为在线系统的一种运行时优化。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/878782

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX