重复文件目录分析及删除 1 wget -qO- https://haies.cn/assets/deduplicate.sh
使用说明 deduplicate 是一个 Bash 脚本,用于递归分析指定目录下的重复文件和目录(内容完全相同),并根据用户选择执行删除或仅记录日志。脚本遵循以下核心规则:
重复范围 :仅在同一父目录下判定重复(文件和目录分开处理)。
遍历顺序 :按目录深度从浅到深处理,先处理子目录重复,再处理文件重复。
保留策略 :对于每个重复组,保留文件名最短且修改时间最早的一项,其余标记为待删除。
自动忽略 :处理时会自动跳过以下项目(不参与分析,也不会出现在日志中):
以点(.)开头的文件和目录(隐藏项)
名为 node_modules、dist、build、bin、debug 的目录(不区分大小写)
日志文件 :在每个待分析目录下生成独立的日志文件,文件名格式为 .deduplicate_YYYYMMDD_HHMMSS.log(包含脚本启动时间)。日志仅记录重复项,每行格式为:
状态包括 KEEP(保留)、TO_DEL(待删除)、DELETED(已删除)。
删除模式 :通过 -d 选项启用。如果指定目录下已有脚本生成的日志,则直接读取日志中状态为 TO_DEL 且仍存在的项目并执行删除,同时将对应日志行状态更新为 DELETED(不新增行 )。如果无日志,则正常分析并直接删除重复项,同样只更新原日志行状态。
⚠️ 注意事项
删除不可恢复 :脚本使用 rm -rf 直接删除文件和目录,请务必先备份重要数据,并在测试环境中验证脚本行为。
权限要求 :脚本需要对待分析目录具有读取和执行权限,对需删除项具有写权限。
性能提示 :目录重复检测依赖 diff -rq,对于包含大量文件的目录可能较慢,请耐心等待。
日志积累 :日志文件会永久保留,每次运行会生成新日志。删除模式下,多次运行可复用已有日志,仅更新状态。
基本用法 1 deduplicate [-d] dir1 [dir2 ...]
**-d**:可选参数,启用删除模式。不加此参数时,仅将重复项记录到日志,不执行任何删除。
**dir1 dir2 ...**:必需参数,至少指定一个待分析的目录(绝对路径或相对路径均可)。
脚本会对每个目录独立处理,生成各自的日志文件。
使用示例 示例 1:仅分析单个目录(不删除) 1 ./deduplicate /home/user/documents
分析 /home/user/documents 下的重复项,结果记录到 /home/user/documents/.deduplicate_20260228_093012.log。屏幕显示扫描进度和发现的重复组。
示例 2:分析多个目录 1 ./deduplicate /home/user/docs /home/user/backup
分别分析两个目录,各自生成日志文件,互不影响。
示例 3:分析并删除重复项(无现有日志) 1 ./deduplicate -d /mnt/data/projects
分析 /mnt/data/projects,发现重复组后直接删除待删除项,日志中对应行状态从 TO_DEL 变为 DELETED。屏幕显示删除进度。
示例 4:已有日志情况下再次运行删除模式 假设之前已运行分析(不带 -d),生成了日志文件 .deduplicate_20260228_093012.log,其中包含一些 TO_DEL 项。现在执行:
1 ./deduplicate -d /mnt/data/projects
脚本会自动找到该目录下最新的日志,读取其中所有 TO_DEL 且仍存在的项目并删除,同时将日志中对应行更新为 DELETED。如果日志中已无 TO_DEL 项,则输出提示并结束。
示例 5:查看日志内容 日志文件示例片段:
1 2 3 4 [2026-02-28 09:17:07] | G001 | /mnt/d/tmp/test/xs/凡人修仙传-- 忘语 -- 2017.epub | KEEP [2026-02-28 09:17:07] | G001 | /mnt/d/tmp/test/xs/凡人修仙传-- 忘语 -- 2017 - 副本.epub | DELETED [2026-02-28 09:17:07] | G002 | /mnt/d/tmp/test/xs/斗罗大陆 -- 唐家三少.mobi | KEEP [2026-02-28 09:17:07] | G002 | /mnt/d/tmp/test/xs/斗罗大陆 -- 唐家三少 - 副本.mobi | DELETED
其中 G001、G002 为组ID,每个组内先显示保留项(KEEP),再按文件名升序显示已删除项(DELETED)。
附录:脚本依赖
Bash 4.0 或更高版本
标准命令:find、sort、stat、sed、sha256sum、diff、rm 等
确保脚本具有可执行权限:chmod +x deduplicate
如有任何问题或建议,请根据实际情况调整脚本或联系脚本维护者。
单目录智能压缩解压 1 wget -qO- https://haies.cn/assets/tar_single.sh
使用说明 该脚本是一个功能完整的大容量单目录 分卷压缩、解压工具,具有以下特点:
支持三种压缩算法:gzip、zstd(推荐)、xz
支持三种操作模式:创建压缩包、解压、验证完整性
自动检测压缩格式,无需手动指定算法
提供分卷校验和验证,确保数据完整性
彩色日志输出,包含时间戳,便于跟踪和审计
基本用法 命令格式 :
1 ./tar_single.sh -[操作方式][压缩算法] [操作对象]
参数说明 :
操作方式 :
c:创建压缩包
x:解压压缩包(自动检测格式)
t:测试压缩包完整性(自动检测格式)
压缩算法 (仅创建时需要):
z:gzip(默认)
s:zstd(推荐,速度快)
o:xz(压缩比高)
使用示例 1 2 3 4 5 6 7 8 9 10 11 12 ./tar_single.sh -cz /path/to/data ./tar_single.sh -cs /path/to/data ./tar_single.sh -co /path/to/data ./tar_single.sh -x /path/to/archive_dir ./tar_single.sh -x /path/to/archive.tar.zst.part00 ./tar_single.sh -t /path/to/archive_dir ./tar_single.sh -t /path/to/archive.tar.gz.part00
关键特性 :
解压和测试时自动识别压缩格式,无需指定算法参数
提供详细的带时间戳的日志输出,便于问题排查
默认使用并行压缩工具,处理大文件时效率更高
存档批量压缩 1 wget -qO- https://haies.cn/assets/tar_batch.sh
使用说明 智能压缩指定目录内文件数量较多的文件夹,自动根据目录深度和文件数量应用不同压缩规则,并排除文档、图片、视频、音频等特定文件类型,这个脚本特别适合处理日志目录、临时文件目录、上传目录等包含大量小文件的场景,能有效减少inode使用量,提升文件系统性能。
基本用法
不指定目录时,默认处理脚本所在目录
处理深度3-5的目录,按从浅到深顺序
使用示例
压缩当前目录 :./tar_batch.sh
压缩指定目录:./tar_batch.sh /path/to/your/data
压缩规则
深度 < 4 :不含排除文件类型,文件数50-100 → 压缩
深度 = 4 :不含排除文件类型,文件数 > 50 → 压缩
深度 > 4 :无条件压缩
搜索深度 :仅处理深度3-5的目录
排除的文件类型
文档 :.txt .pdf .doc .docx .xls .xlsx .ppt .pptx .odt .md .rtf
图片 :.jpg .jpeg .png .gif .bmp .tiff .svg .webp
视频 :.mp4 .avi .mov .mkv .flv .wmv .m4v .webm
音频 :.mp3 .wav .flac .aac .ogg .m4a .wma
执行后,符合条件的目录会被压缩,并在同级位置生成:
单卷包:目录名.tar.gz
多卷包:目录名_archive/ 文件夹(内含分卷文件)
脚本执行期间,终端会单行显示当前正在压缩的文件名。 脚本会在目标目录生成带时间戳的日志文件。
SVN服务器端工具 1 wget -qO- https://haies.cn/assets/svn_server_tool.sh
使用说明 本脚本主要用于在服务器端直接查看 和统计 SVN代码仓库的信息,无需通过客户端连接。适用于系统管理员、运维人员或开发人员直接访问SVN服务器文件系统,快速获取代码仓库的相关信息。包括以下功能:
目录内容查看
查看SVN仓库的目录结构
仅显示指定目录的第一层内容(非递归)
区分显示目录和文件
代码修改历史查询
查看指定文件或目录的所有修改记录
显示每次修改的版本号、作者、时间、提交信息
查看具体的文件变更操作(添加、删除、修改等)
代码提交统计分析
统计指定文件或目录的提交情况
按作者统计提交次数和百分比
显示最早和最晚提交时间
可视化展示提交分布情况
基本用法 命令格式
1 ./svn_server_tool.sh <功能> <仓库路径> [目录/文件路径]
参数说明
功能参数 (第一个参数):
ls:列出目录内容
log:查看修改历史
stat:统计提交信息
仓库路径 (第二个参数):
SVN仓库在服务器上的物理路径
示例:/var/svn/repos/myproject
目标路径 (第三个参数):
对于ls功能:可选 ,指定要查看的SVN仓库内目录
对于log和stat功能:必填 ,指定要分析的目标路径(SVN仓库内的相对路径)
使用示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ./svn_server_tool.sh ls /var/svn/repos/myproject ./svn_server_tool.sh ls /var/svn/repos/myproject /trunk/src ./svn_server_tool.sh log /var/svn/repos/myproject /trunk/src/main.java ./svn_server_tool.sh log /var/svn/repos/myproject /trunk/src ./svn_server_tool.sh stat /var/svn/repos/myproject /trunk/src/main.java ./svn_server_tool.sh stat /var/svn/repos/myproject /trunk/src