# 硬链接助手 **Repository Path**: gaifan/HardLink ## Basic Information - **Project Name**: 硬链接助手 - **Description**: 硬链接工具,自动递归创建目标目录,支持后缀名过滤,支持正则匹配替换 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 10 - **Forks**: 0 - **Created**: 2021-09-26 - **Last Updated**: 2024-05-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HardLink ## 写在前面 1. 请优先考虑使用其他自动化脚本或工具 2. 使用本工具需要了解**硬链接**相关知识,并详细阅读说明 3. 请勿对系统或重要的文件或文件夹进行操作 4. 界面很丑 ## 免责声明 您使用本工具造成的一切损失,与作者无关。如不接受此条款,请不要使用本工具,并立刻删除已经下载的源码。 ## 简介 本工具通过系统提供的硬链接接口创建指定文件的硬链接,并支持正则匹配替换文件名。使用Java编写,同时支持图形界面(Swing)和命令行两种模式。 ## 运行环境 Java Runtime Environment(JRE) 8.0+ ## 功能 - 指定文件夹递归创建文件硬链接,并自动创建目标目录 - 支持自定义递归深度 - 支持文件名后缀过滤 - 支持正则表达式匹配文件名,支持包含父级目录名匹配 - 支持正则表达式替换目标文件名,支持创建额外目录 - 支持文件最后修改时间过滤 - 支持目标文件名添加前缀 - 支持多语言 - 同时支持图形界面与命令行模式 ## 使用 运行前请先检查以下内容: 1. 请确认执行者的账号有硬链接的权限 2. 已安装可用的Java运行环境(要求JRE 8+) ### 图形界面模式 不加入任何启动参数,即启动图形界面。\ Windows双击`start_gui.bat`;Linux执行脚本`start_gui.sh`\ 工具配置保存在启动目录的config.properties文件,退出时自动把界面中的所有配置写入该文件。\ 配置字段说明见config.sample.properties文件 #### 主界面 ![图形界面-主界面](readme_img/main.jpg) 1. 来源目录,工具将扫描此目录 2. 来源目录选择路径 3. 通过系统管理器打开填入的来源目录 4. 目标目录,文件链接到该目录 5. 包含后缀,留空为匹配所有 6. 排除后缀,留空为不排除,被排除的文件不参与链接。同时匹配包含和排除时,优先排除。 7. 开始操作 8. 操作打印的详情 #### 进阶设置 ![图形界面-进阶设置](readme_img/advance.jpg) 1. 导入设置,从其他配置文件读取配置,覆盖到当前界面 2. 导出设置,保存当前界面所有配置到文件 3. 点击10次后,界面所有设置均重置到默认状态 4. 切换语言 5. 搜索来源目录的深度,超过层数将不被扫描和链接 6. 链接目标文件增加前缀 7. 来源文件的最后修改时间需*晚于*该时间,留空时不作为过滤条件 8. 来源文件的最后修改时间需*早于*该时间,留空时不作为过滤条件 9. 匹配的正则表达式 10. 左键:打开文件选择器,选一个文件名;右键:自动填入来源路径(主界面-1)符合条件的第一个文件名 11. 正则匹配时,待匹配文字包含父级目录。不包含`file.mp4`;包含1层`bar/file.mp4`;包含2层`foo/bar/file.mp4` 12. 匹配替换模式字符串,匹配后替换文件名,JAVA正则组使用`$1` `$2`等表示 13. 左键:返回第一个详细结果;右键:返回所有结果。测试不会创建任何链接,建议每一次开始正式操作前都测试一下。 ### 命令行模式 该模式下不会修改或保存任何配置文件,配置文件字段说明见config.sample.properties\ 参数使用`--c={配置文件}`启动,例如: >`java -jar HardLink.jar --c=config.properties` 添加参数`-test`执行测试,例如: >`java -jar HardLink.jar --c=config.properties -test` 添加参数`-testOne`执行测试,并仅返回第一个详细结果,例如: >`java -jar HardLink.jar --c=config.properties -testOne` 可添加参数`--{字段}={值}`以覆盖配置文件中相应的字段,例如: >`java -jar HardLink.jar --c=config.properties --language=en` ## 使用正则表达式注意事项 **正则替换功能仅建议能准确使用正则表达式的大佬们使用。**\ **在开启正则替换的情况下,不建议将本工具嵌入自动化脚本中。**\ 当同时开启正则表达式匹配、匹配包含父级目录、匹配后替换时,替换会包含目标的父级目录相应的层数。\ Windows目录分割符`\\`,Linux目录分隔符`/`\ 功能虽强大,但风险也是巨大,请谨慎使用,正式操作前务必进行测试。\ 举例: > 文件完整路径:`/foo/bar/file.mp4`\ > 来源目录:`/foo/`\ > 链接到目录:`/link/that/` > > 状况1 >> 正则表达式匹配:`^(.+)/(.+)$`\ >> 包含目录层数:`1`\ >> 匹配后替换:`dir/$2`\ >> 链接结果:`/link/that/dir/file.mp4` > > 状况2 >> 正则表达式匹配:`^(.+)/(.+)$`\ >> 包含目录层数:`1`\ >> 匹配后替换:`$2`\ >> 链接结果:`/link/that/file.mp4` > > 状况3 >> 正则表达式匹配:`^(.+)/(.+)/(.+)$`\ >> 包含目录层数:`2`\ >> 匹配后替换:`../usr/bin/$3`\ >> 链接结果:`/usr/bin/file.mp4`\ >> **跳出了目标目录,并且进入到系统关键的目录创建了一个硬链接文件** > > 状况4 >> 正则表达式匹配:`^(.+)/(.+)/(.+)$`\ >> 包含目录层数:`2`\ >> 匹配后替换:`$3/$1`\ >> 链接结果:`/link/file.mp4/foo`\ >> **不仅跳出了目标目录,还把文件名字变成foo** > > 状况5 >> 正则表达式匹配:`^(.+/(.+/(.+)))$`\ >> 包含目录层数:`2`\ >> 匹配后替换:`QAQ$1$2$3`\ >> 链接结果:`/QAQfoo/bar/file.mp4bar/file.mp4file.mp4`\ >> **所以一定不要乱用!** ## 开发相关 ### 编译 请安装相关Java IDE进行编译,因为太懒没写Ant脚本或Maven配置。项目使用标准JDK即可编译,无额外依赖。\ 编译成jar后,加上release文件夹全部内容,并放在同一个目录下即可。 ### 二次开发 MIT开源协议,请随意。\ 若想修改或集成硬链接功能,关注以下两个文件即可 >[`me/zd/tool/hardlink/service/HardLinkService.java`](src/me/zd/tool/hardlink/service/HardLinkService.java)\ >[`me/zd/tool/hardlink/model/LinkSetting.java`](src/me/zd/tool/hardlink/model/LinkSetting.java) ## 最后 本工具仅在Win10电脑上进行了测试,不保证其他系统能正常运行。\ 若使用过程中有任何问题或建议,欢迎扔到Issues。\ 我自己用了一段时间,把常用到的放上去了,若有任何需求,也欢迎扔到Issues,我会挑我喜欢的加上。