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 】
相关推荐:
活动邀请函制作网站有哪些,活动邀请函文案?
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
网站页面设计需要考虑到这些问题
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
如何快速选择适合个人网站的云服务器配置?
Java垃圾回收器的方法和原理总结
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
音乐网站服务器如何优化API响应速度?
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
JavaScript实现Fly Bird小游戏
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
如何快速搭建安全的FTP站点?
Laravel如何创建自定义Facades?(详细步骤)
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
如何在建站主机中优化服务器配置?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
Python文件异常处理策略_健壮性说明【指导】
简单实现jsp分页
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
利用python获取某年中每个月的第一天和最后一天
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
油猴 教程,油猴搜脚本为什么会网页无法显示?
,网页ppt怎么弄成自己的ppt?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Laravel如何自定义分页视图?(Pagination示例)
如何在IIS7上新建站点并设置安全权限?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
详解Android——蓝牙技术 带你实现终端间数据传输
js实现获取鼠标当前的位置
Python函数文档自动校验_规范解析【教程】
如何在IIS中新建站点并解决端口绑定冲突?
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
Laravel如何处理异常和错误?(Handler示例)
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
php485函数参数是什么意思_php485各参数详细说明【介绍】
Bootstrap CSS布局之列表
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
微信小程序 require机制详解及实例代码
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】

