Linux 上怎么做文件去重?真实场景示例
发布时间 - 2025-12-05 00:00:00 点击率:次使用fdupes或find+md5sum识别并处理内容重复文件,先备份、过滤非目标文件,再通过删除或转硬链接实现安全去重,推荐fdupes交互操作与hardlink节省空间。
Linux 上做文件去重,核心是识别内容相同但路径/名称不同的文件,并安全地保留一份、删除或软链接其余。不看文件名、大小,只看内容是否一致——这才是真实去重。
用 fdupes 快速找并处理重复文件
fdupes 是最常用、可靠的去重工具,按文件内容(MD5 + 比对)识别重复项,支持交互式删除或自动处理。
- 安装:Ubuntu/Debian 用 sudo apt install fdupes;CentOS/RHEL 用 sudo yum install fdupes(或 dnf)
- 扫描当前目录及子目录所有普通文件:fdupes -r .
- 显示重复组并交互式选择保留哪份(其余删除):fdupes -r -d . → 每组出现时输入要保留的编号(如 1),回车即删其余
- 直接删除所有重复项(只留每组第一个):fdupes -r -f . | xargs -I {} rm -v "{}"(-f 输出唯一文件,即每组仅首行;慎用,建议先试运行不带 rm 的版本)
用 find + md5sum 手动排查(适合脚本集成或无 root 环境)
当不能装 fdupes,或需嵌入自动化流程时,可用
find 配合校验和实现轻量去重逻辑。
- 生成所有文件的 MD5 和路径:find /path/to/dir -type f -exec md5sum {} \; | sort
- 提取重复 MD5 块:find /path/to/dir -type f -exec md5sum {} \; | sort | awk '{if ($1 == prev) print; prev=$1}'
- 更实用的一行去重清理(保留每组第一个,其余加 .dup 后缀):
find /data/docs -type f -exec md5sum {} \; | sort | awk 'NR==FNR{a[$1]=$2;next} $1 in a{print "mv \"" $2 "\" \"" $2 ".dup\""}' - - | sh -x
(说明:先建哈希→路径映射,再对重复哈希输出重命名命令,最后执行;-x 可预览操作)
去重前必做的三件事
真实场景中,误删代价高,务必提前验证和防护:
- 确认文件类型:避免对日志、数据库文件、正在写的临时文件去重(加 -not -name "*.log" -not -path "/proc/*" 过滤)
- 备份关键目录:至少用 cp -al 做硬链接快照(节省空间且秒级恢复):cp -al docs docs-backup-$(date +%F)
- 检查硬链接数:用 ls -li 看 inode 号,相同表示已是硬链接——这类无需去重,它们本就是同一份数据的不同入口
进阶技巧:用 hardlink 把重复内容转为硬链接(省空间不丢文件)
比起删文件,把重复内容统一指向同一个 inode 更安全、可逆,尤其适合备份目录、静态资源库。
- 安装:sudo apt install hardlink(Debian/Ubuntu)
- 在目标目录下将内容相同的文件转为硬链接:hardlink -t /path/to/dir
- 效果:原文件名、权限、时间戳全保留,磁盘占用降为 1 份;注意:仅限同一文件系统内生效
基本上就这些。真实场景里,先用 fdupes -r -d 交互确认,再考虑 hardlink 自动优化,比写一堆 find 脚本更稳更快。关键是别跳过备份和过滤——去重不是目的,释放空间且不出错才是。
# linux
# centos
# node
# ubuntu
# 工具
# dnf
# print
# if
# sort
# date
# 堆
# li
# 数据库
# debian
# 自动化
# 每组
# 第一个
# 进阶
# 才是
# 这类
# 已是
# 不看
# 更快
# 现时
# 只看
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何制作一个表白网站视频,关于勇敢表白的小标题?
深圳网站制作培训,深圳哪些招聘网站比较好?
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
大连 网站制作,大连天途有线官网?
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
如何在建站之星网店版论坛获取技术支持?
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
Android滚轮选择时间控件使用详解
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
Laravel Docker环境搭建教程_Laravel Sail使用指南
JS中对数组元素进行增删改移的方法总结
长沙企业网站制作哪家好,长沙水业集团官方网站?
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
原生JS实现图片轮播切换效果
jQuery 常见小例汇总
JavaScript如何实现错误处理_try...catch如何捕获异常?
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
Firefox Developer Edition开发者版本入口
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
实例解析Array和String方法
如何确认建站备案号应放置的具体位置?
重庆市网站制作公司,重庆招聘网站哪个好?
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
开心动漫网站制作软件下载,十分开心动画为何停播?
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
Swift中循环语句中的转移语句 break 和 continue
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
Laravel如何发送系统通知?(Notification渠道示例)
Laravel如何集成Inertia.js与Vue/React?(安装配置)
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
iOS发送验证码倒计时应用
Laravel如何为API生成Swagger或OpenAPI文档
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
焦点电影公司作品,电影焦点结局是什么?
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
如何在腾讯云免费申请建站?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
Java遍历集合的三种方式
如何登录建站主机?访问步骤全解析
微信小程序 配置文件详细介绍
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?

