V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
276562578
V2EX  ›  软件

请教一下文件去重软件

  •  
  •   276562578 · 27 天前 · 863 次点击

    找了很多的文件去重软件,都似乎没法满足我的需求,想着干脆自己写一个,写之前问问 v 友是否有我不知道的软件实际可以满足我的需求,避免造轮子

    我的去重是经常乱放文件导致的,我希望能够把这些文件整理一下,比如我现在有一个备份的文件 photo

    1. 我想找到 photo1 和 photo2 中完全一致的文件,删除 photo2 的,保留 photo1 的
    2. 如果有文件名一致,但文件内容不一致的,可以根据规则,比如文件大小,时间来自动全部处理掉
    3. photo1 中的文件散列值 md5 可以自动的存下来,免得重扫
    4. 对于文件大小不一致这种肯定不可能一致的直接跳过
    5. (可选)对于超过一定大小如 1G 的,文件 bit 数也完全一致的,只抽样比对节省时间,抽样结果一致再全部验证确保完全一致
    6. 散列算法保证几乎不可能有意外
    7. (可选)散列算法要是 xxhash 这种超快的就最好了

    我的核心诉求是前三条

    感谢 v 友

    13 条回复    2025-06-21 15:22:17 +08:00
    bzw875
        1
    bzw875  
       27 天前
    我一般是这么做的,把诉求丢给 chatGPT ,写我看懂的语言,比如 node.js 。
    然后自己先调试。免得 AI 幻觉把我文件删除了。
    你可以让他写 Python ,或者 shell
    Cu635
        2
    Cu635  
       27 天前
    dupegure 试一试?

    这个在 GUI 操作上可能还是有提升空间,不过我用了一阵子了感觉功能上没啥大毛病。

    它默认情况是普通模式,对文件是看内容完全一致进行判断;可以设置为“图片”模式,这样它对图片文件就是看图像内容判断一致性的(视频不行)。

    不过 2 那个它倒是没有,因为这种时候 dupegure 会认为文件不一致,不会出现在结果当中。当然设置了“图片”的话就是看图像内容了。

    4 、5 、6 、7 这些应该说是开发需求,而不是使用需求了……
    NoOneNoBody
        3
    NoOneNoBody  
       27 天前
    windows:clonespy 免费不开源 1/3/4/6/7 它主要是根据 size+crc32 的,好像也有 name 或 name+size 的,就是你说的 2 ,但我基本没用过这种方式
    5 即使其他工具应该没有,除非自己写

    其他平台不知道
    sunnyadamm
        4
    sunnyadamm  
       27 天前
    duplicate cleaner pro 貌似比较符合你,windows 的
    276562578
        5
    276562578  
    OP
       27 天前
    @Cu635 2 还是挺重要的,因为一些原因我的图片很多是同名但是有些是缩略图,感觉是得自己写了
    276562578
        6
    276562578  
    OP
       27 天前
    @NoOneNoBody 2 主要是遇到重复的文件后的处理方式,一个一个选就很麻烦,我去试试看这个软件
    276562578
        7
    276562578  
    OP
       27 天前
    @sunnyadamm 好的,这个我也试试看
    NoOneNoBody
        8
    NoOneNoBody  
       27 天前
    自己写我也写了,python
    1. 两组 dataframe 'fullpath' df1/df2 ,各自求 size ,假如要删除 df1 中的
    2.df3=df1.merge(df2, on='size', how='left', suffix=('_1', '_2')),然后 df3 去掉'fullpath_2'为 nan 的行
    3.再 df3 用 fullpath_1/fullpath_2 求 crc32 或其他 hash ,再根据这个 hash 在匹配一次

    如果所有文件之前已经 hash 过,有保留数据,可以直接第 3 步,on=['size', hash]就行
    还有其他以此扩展的思路(匹配的不止是文件 hash ,而是图像内容),就不细说了
    图片去重我每天都在做,但不是 file hash ,file hash 我反而懒得搞,扔给 clonspy 完成
    dcsuibian
        9
    dcsuibian  
       27 天前
    用 zfs 文件系统,开启去重,这样只占一份的空间。甚至不是文件级而是块级。
    avenger
        10
    avenger  
       27 天前
    Eagle 有去重功能,看是不是适合你
    NoOneNoBody
        11
    NoOneNoBody  
       27 天前
    @276562578 #6
    有的,面板 1|2(就是你的第一条需求),文件新 | 旧、字节数大 | 小、文件名长 | 短 8 种方式自动删除
    276562578
        12
    276562578  
    OP
       27 天前
    @dcsuibian 需要的不是去重哦,而是删掉多余的备份,并不是为了减少空间占用
    Cu635
        13
    Cu635  
       26 天前
    @276562578 #5
    那就是 dupegure 的“图片”模式,这样它对图片文件就是看图像内容判断一致性的,忽略图片格式(扩展名等)、分辨率等。

    你在主楼里面说的 2,说是“文件名一致,但文件内容不一致”,我还以为是完全不一样呢。不过 dupegure 的“普通”模式就是要求完全一样了。

    不过这个跟“文件名”就没有任何关系了,“文件名”是个干扰项。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3038 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 12:06 · PVG 20:06 · LAX 05:06 · JFK 08:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.