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

如何对文件进行查重

  •  
  •   1054850490 · 146 天前 · 3309 次点击
    这是一个创建于 146 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如图所示,每个文件都有一个“唯一的标识符”,同样标识符的文件,根据文件大小筛选掉最小的,或者根据“创建时间”筛选出最早的,不考虑自己编程的情况下,市面有没有成形的软件可以处理的?
    第 1 条附言  ·  146 天前
    主要是帖主编程基础为零,所以才想着市面有没有成熟的软件可以处理
    第 2 条附言  ·  146 天前
    楼主还在测试下面网友的方法,没有回复到可能就是在测试中
    25 条回复    2022-09-17 09:27:15 +08:00
    whileFalse
        1
    whileFalse  
       146 天前 via iPhone
    这玩意自己写怕是一个小时都用不了…
    huang119412
        2
    huang119412  
       146 天前
    用文件特征值,如 MD5 之类
    AX5N
        3
    AX5N  
       146 天前   ❤️ 1
    Duplicate Cleaner
    r6cb
        4
    r6cb  
       146 天前
    遍历目录所有文件,存到 map 。key 为唯一标识符,value 为 list 。list 按照那两个要求排序把后面的删掉。十几行代码的事
    zxsa
        5
    zxsa  
       146 天前
    Duplicate Cleaner 5
    ![dfe641b33681644e86bace24699c3b18.png]( https://www.cap2box.com/images/dfe641b33681644e86bace24699c3b18.png)
    gdgoldlion
        6
    gdgoldlion  
       146 天前
    懒得自己弄,就用 Duplicate Cleaner Pro ,界面好看选项多
    yanqiyu
        7
    yanqiyu  
       146 天前
    都有天然的分界词 “网页地址” 了,直接写个脚本不会很复杂
    deorth
        8
    deorth  
       146 天前 via Android
    zfs dedup
    wxf666
        9
    wxf666  
       146 天前   ❤️ 1
    用 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
        10
    cyningxu  
       146 天前
    这。。。有发帖的时间怕是代码都写完了吧
    cxtrinityy
        11
    cxtrinityy  
       146 天前
    论 linux 下会 shell 的便利性
    loveress01
        12
    loveress01  
       146 天前 via Android
    documentzhangx66
        13
    documentzhangx66  
       146 天前
    年代不一样了,现在已经不是软件或算法去重的年代了。

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

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

    更重要的是,你看清楚,OP 的场景你这玩意儿根本不顶用。
    pickboss
        18
    pickboss  
       145 天前
    @wxf666 大佬这 shell 脚本写得好溜
    documentzhangx66
        19
    documentzhangx66  
       145 天前
    @FrankHB

    你这是吃螃蟹受害了。

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

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

    另外,生产系统,需要做备份。没做备份数据丢了恢复起来当然麻烦。
    FrankHB
        20
    FrankHB  
       145 天前
    @documentzhangx66 重要数据当然有备份,所以受害的主要还不是数据,而是时间。

    最大的教训是策略方面的问题:要想持久数据(包括文件系统元数据自身,比如文件创建时间)真正可靠,就不要依赖文件系统层次上的半吊子功能,而应该在更高的层次上冗余,因为文件系统暴露给 UI 直接提供的最终用户的功能极其有限,一旦出问题难以短期内选择数据的二进制映像恢复回正常操作状态(有源码的都看的要死,更别提 Windows 上一堆找不到源码的)。文件系统去重只能作为在线系统的一种运行时优化。
    1054850490
        21
    1054850490  
    OP
       139 天前
    @gdgoldlion 尝试了一下发现不可行,没有正则表达式匹配,虽然有比对视频帧,但是太慢了
    gdgoldlion
        22
    gdgoldlion  
       139 天前
    @1054850490 支持正则的啊,视频功能没用过
    1054850490
        23
    1054850490  
    OP
       139 天前
    @gdgoldlion 它那个正则是哈希查重出来才能对已经查重的文件加以正则去重,并不能一开始就比对正则表达式
    1054850490
        24
    1054850490  
    OP
       138 天前   ❤️ 1
    @gdgoldlion #6 不好意思,是我弄错了,还有一个叫 Duplicate Cleaner 5 的,撞名了,见鬼的是他网站里面也是叫 Duplicate Cleaner Pro
    1054850490
        25
    1054850490  
    OP
       138 天前
    @gdgoldlion 22# 结果实测,很疑惑也不支持正则表达式查重
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   315 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 72ms · UTC 22:10 · PVG 06:10 · LAX 14:10 · JFK 17:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.