Skip to content

About

一款Windows下的NTFS文件系统的硬链接批量创建和管理工具,常用于运维以及文件备份,空间节省。

Resources

Stars

145 stars

Watchers

0 watching

Forks

Repository files navigation

ElegantHLK (优雅硬链接) 🔗

一款开源的Windows下的NTFS文件系统的硬链接批量创建和管理工具,常用于运维以及文件备份,空间节省。它能够智能扫描指定目录下的重复文件,并将其一键转换为硬链接,从而在不影响文件正常使用的情况下,最大化释放你的物理磁盘空间。

软件界面1.0

v1.8.1 更新

  1. 【无 GUI 命令行】新增 --cli 模式,提供 analyze、create、sync 三个子命令;同一个 exe 即可运行,全程不弹窗、不依赖桌面,适合脚本与 AI/Agent 调用。
  2. 【Agent 友好输出】默认输出 JSON,错误写入 stderr;analyze 返回 ok/version/command/root/filesScanned/groupCount/duplicateFileCount/potentialSavings/potentialSavingsText/elapsedMs 及 groups[],便于程序解析。
  3. 【默认 dry-run】create / sync 默认只预演、不修改磁盘,确认后加 --apply 才真正执行;create 建链前重新校验 SHA-256,.hlbak 唯一避让,跳过受保护路径,默认跳过高风险扩展名(--allow-risky 才允许)。
  4. 【退出码规范】成功 0、执行失败 1、用法错误 2,方便脚本判断。
  5. 【版本】版本号升至 1.8.1,manifest 同步为 1.8.1.0。

v1.8 及更早版本的更新记录见 CHANGELOG.md。


00 科普 和 介绍

什么是硬链接?

NTFS硬链接就像是给同一个文件起了多个不同的"名字",这些名字都指向硬盘上同一份实际数据,无论通过哪个名字修改,内容都会同步变化。 它跟复制文件完全不同——复制会占用两份空间,而硬链接无论创建多少个,都只占用原文件的那一份磁盘空间。 只有当最后一个"名字"被删除后,文件才真正从硬盘消失,就像一把钥匙配多把锁,必须所有锁都拆了,门才能彻底打开。

这个程序干什么用的?

用来文件查重,并且一键删除多余的数据**(不是删除你的文件!)**,可以让我们在不删除文件的情况下,挤出这些重复文件所占的多余空间!

并且在介绍里我也说了,这个程序可用于文件备份清理、硬盘屯屯鼠、以及一些拥有大量存储空间,但是重复文件过多的人群!

这个程序和市面上那些已有程序有什么优势

优势可大了! ①我这个程序开源!并且是较为宽松的MIT协议! ②我这个程序可以用列表的形式直观呈现是否硬链接,是否可以创建,还会自动统计一次清除能节省多少空间! ③程序和代码及其小巧!程序本身只有130KB!还不够你一张自拍照大! ④性能极其优越!本程序采用C/C++编写、GUI程序功能使用的是完全的Windows原生api(连SHA256都是!)。使用的GDI+库,让你在高分辨率2K屏、4K屏下都能自适应缩放,完全不会像老程序一样模糊

怎么看出程序有用的?

使用程序扫描清理完后,从文件属性看,空间占用似乎不变。可是!请你看看盘符界面,硬盘的空余空间却变大了!这就是有用,这就是真实的空余空间,不是虚假的!

01✨ 核心功能

  • 重复文件分析:使用 SHA-256 哈希算法,对文件内容进行精确比对,精准找出深层目录结构中的重复文件。(文件夹下所有内容!)
  • 一键批量硬链接转换:一键将所有重复文件转换为硬链接。程序会自动保留每组的第一个文件作为源文件数据,并“永久释放”其余物理文件以释放空间,同时在界面上直观展示总计可省空间。【释放文件数据并不会导致其他地方的文件被删除,而是所有相同文件都会指向同一个数据!这样会节省大量空间,可在硬盘剩余空间展示出效果!】
  • 硬链接映射表(v1.7):批量建立硬链接后自动在扫描目录生成 .hlkm 映射表,记录每组源文件与副本的路径。游戏或软件更新后点「同步映射表」,程序会找出组内最新的文件并自动把其他路径重新链接过去(跨卷时自动退化为复制),不用再手动扫描和重建。
  • 丰富的类型过滤器:下拉菜单内置了多种常用文件过滤规则,包括:常用视频、高清/蓝光视频、音频、图片素材、执行文件、压缩包以及文档等,也支持自定义 *.* 扫描。我没想搞太多格式的筛选,暂时先添加这么多了
  • 高分屏 (High DPI) 适配:底层通过调用 GDI+ 实现了原生的 SetProcessDPIAware 高分辨率显示支持,确保在现代高分屏显示器上界面清晰锐利。并且,这是原生的GUI绘制方案,不依赖第三方各种庞大的框架,把程序体积控制在150KB以内!
  • 右键上下文菜单:支持在文件列表中右键复制文件名 / 完整路径 / SHA256,在资源管理器中定位、送回收站删除(可还原),以及对已建立的硬链接进行解绑还原。
  • 中英双语界面:自动识别系统语言,非中文系统默认英文,也可以在界面上一键切换,选择自动记忆。
  • 昼夜模式:自动跟随系统明暗主题,也可手动锁定浅色/深色,纯原生绘制无新增依赖。
  • 重复副本直接删除:不想用硬链接的用户,可以每组保留一份、其余重复副本一键送入回收站。
  • 软连接模式:勾选「软连接模式」后,一键把重复文件转换为指向源文件的软连接,可跨盘符使用,备份场景更灵活(需管理员权限或 Win10 开发者模式)。
  • ACL 权限兜底:TrustedInstaller/SYSTEM 等特殊所有者、权限表拒绝访问的文件也能处理——自动启用特权接管所有权并补权限条目,处理完按需还原。
  • 列表多选:Shift 点首尾范围内全勾/全不勾,Ctrl 单击自由勾选,批量操作更顺手。

02🛠️ 开发相关信息

  • 开发语言:C/C++
  • 图形界面:原生 Win32 API 和 GDI+
  • 查重算法:Windows CryptAPI (计算 SHA-256)
  • 极佳的兼容性:宏定义 _WIN32_WINNT 0x0501,保持了对早期操作系统(如 Windows XP)的兼容支持,同时解决基础版 XP SDK 隐藏 SHA256 宏的问题。本项目的目的就在于给硬盘数据做极致的空间整理,不管你的电脑有多老!(到xp都行)

03🚀 快速上手and快速教程

  1. 在顶部下拉框选择需要扫描的 磁盘 或手动输入 地址。
  2. 选择需要查找的 文件类型 过滤器(也可以不选)。
  3. 点击 分析文件(查重),等待右侧列表显示出相同 SHA-256 的重复文件组。
  4. 确认无误后,点击 一键创建硬链接 完成物理文件的释放与替换。

演示前

演示后

04 命令行 / Agent 用法

CLI 与 GUI 是同一个 ElegantHLK.exe,无需额外安装。可以直接用完整路径调用,或把所在目录加入 PATH 后在任意目录运行。CLI 模式不创建窗口、不弹 MessageBox,适合脚本、CI 与 AI/Agent 调用。

子命令

命令 作用
ElegantHLK.exe --cli analyze <dir> 只读分析重复文件,输出统计与分组
ElegantHLK.exe --cli create <dir> 扫描目录并建立硬链接,默认 dry-run
ElegantHLK.exe --cli sync <map.hlkm> 按映射表同步硬链接,默认 dry-run
ElegantHLK.exe --cli version 输出版本
ElegantHLK.exe --help / -h 输出用法

ElegantHLK.exe --version / -V 与 --help / -h 等价于对应 CLI 命令。

通用参数

参数 说明
--filter "*.mp4;*.mkv" 扩展名过滤,分号分隔
--include-regex <R> 只处理文件名匹配正则的文件
--exclude-regex <R> 跳过文件名匹配正则的文件
--min-size <MB> 文件大小下限(MB)
--max-size <MB> 文件大小上限(MB)
--json / --human 输出格式,默认 JSON
--out <file> 把结果写入文件
--apply create / sync 真正执行;不加则 dry-run
--allow-risky create 允许处理高风险扩展名

行为约定

  • create / sync 默认 dry-run,只输出将要执行的操作;加 --apply 才修改磁盘。
  • create 建立链接前重新校验 SHA-256;.hlbak 已存在时自动使用唯一名称;IsProtectedPath 命中的系统关键路径直接跳过;高风险扩展名默认跳过,只有 --allow-risky 才处理。
  • sync 按映射表分组,取组内最新文件为源重新建立硬链接。
  • 错误信息写入 stderr,不会弹出 GUI 提示。
  • 退出码:0 成功,1 执行失败,2 用法错误。

JSON 输出

analyze 默认返回 JSON:

  • 顶层字段:ok、version、command、root、filesScanned、groupCount、duplicateFileCount、potentialSavings、potentialSavingsText、elapsedMs
  • groups[]:sha256、size、sizeText、uniquePhysicalFiles、files

Agent 建议显式加 --json,解析 ok 与退出码;需要落盘时用 --out。

PowerShell 示例

# 分析目录并保存 JSON 报告
.\ElegantHLK.exe --cli analyze "D:\Videos" --filter "*.mp4;*.mkv" --json --out .\report.json
if ($LASTEXITCODE -ne 0) { throw "analyze failed: $LASTEXITCODE" }
# 先 dry-run 查看计划,确认后再 apply
.\ElegantHLK.exe --cli create "D:\Videos" --filter "*.mp4" --json
.\ElegantHLK.exe --cli create "D:\Videos" --filter "*.mp4" --apply --json
# 按映射表同步
.\ElegantHLK.exe --cli sync "D:\Videos\ElegantHLK-map-20261111-120000.hlkm" --apply --json

📄 许可协议与作者

作者信息

📜 历史更新日志

更早版本(v1.0 及更早)与全部历史更新记录见 CHANGELOG.md。

About

一款Windows下的NTFS文件系统的硬链接批量创建和管理工具,常用于运维以及文件备份,空间节省。

Resources

Stars

145 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages