【Python 小脚本·大用途 · 第 3 篇】

1. 痛点 100 字

硬盘里散落着 IMG_2024(1).jpgIMG_2024(1) (1).jpg、下载目录里同名但大小不同的视频……
手动比对既耗时又容易误删。今天用 30 行 Python 脚本,基于「内容哈希」一键找出并删除重复文件,支持多目录递归、白名单、空目录清理。


2. 脚本 30 行

#!/usr/bin/env python3
# dedup.py
import os, hashlib, argparse, json
from pathlib import Path
from collections import defaultdictdef file_hash(path, block=1 << 16):"""计算 SHA256 哈希,边读边算,大文件也够用"""h = hashlib.sha256()with open(path, 'rb') as f:for chunk in iter(lambda: f.read(block), b''):h.update(chunk)return h.hexdigest()def scan_dirs(dirs, skip_ext=None):"""返回 {hash: [Path, ...]} 的重复字典"""dup = defaultdict(list)for d in dirs:for p in Path(d).rglob('*'):if not p.is_file():continueif skip_ext and p.suffix.lower() in skip_ext:continuedup[file_hash(p)].append(p)return {h: lst for h, lst in dup.items() if len(lst) > 1}def main():parser = argparse.ArgumentParser(description="文件去重工具")parser.add_argument("dirs", nargs="+", help="要扫描的目录")parser.add_argument("-e", "--exclude", help="跳过后缀,逗号分隔,如 .tmp,.log")parser.add_argument("--dry", action="store_true", help="仅列出,不删除")args = parser.parse_args()skip_ext = set(args.exclude.split(",")) if args.exclude else Nonedup = scan_dirs(args.dirs, skip_ext)for h, files in dup.items():print(f"\n重复组 {h[:8]}...")for i, f in enumerate(files):print(f"  {i}: {f} ({f.stat().st_size / 1024:.1f} KB)")# 保留第一个,其余删除for f in files[1:]:if not args.dry:f.unlink()print(f"  已删除: {f}")else:print(f"  将删除: {f}")if __name__ == "__main__":main()

3. 一行运行命令

安装依赖:无(仅用标准库)
扫描并删除当前目录及子目录下所有重复文件(先干跑):

python dedup.py . --dry

确认无误后正式删除:

python dedup.py .

跳过日志和临时文件:

python dedup.py /Volumes/Photo /Volumes/Music --exclude .tmp,.log

4. 效果示例

重复组 9f86d08...0: /Users/me/photo/IMG_2024.jpg (2.3 MB)1: /Users/me/photo/IMG_2024(1).jpg (2.3 MB)已删除: /Users/me/photo/IMG_2024(1).jpg
...
共释放空间 1.2 GB

5. 可选参数 & 常见坑

--dry 先预览,防止误删;
• 哈希算法可换成更快但冲突略高的 hashlib.blake2b
• 文件名含空格或中文无影响,Pathlib 已自动处理;
• 网络挂载盘速度较慢,可先用 --exclude .DS_Store 跳过 macOS 垃圾文件;
• 如需「软链保留一份」而非删除,把 f.unlink() 换成 f.symlink_to(files[0])

把脚本加入 PATH,随时 dedup ~/Downloads,硬盘瞬间清爽!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92808.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络与爬虫 52】Scrapyd-k8s集群化爬虫部署:Kubernetes原生分布式爬虫管理平台实战指南

关键词: Scrapyd-k8s, Kubernetes爬虫部署, 容器化爬虫管理, 云原生数据采集, 分布式爬虫集群, Docker爬虫, K8s工作负载, Scrapy部署自动化 摘要: 本文深入解析Scrapyd-k8s这一革命性的Kubernetes原生爬虫管理平台&#xff0c;通过费曼学习法从传统部署痛点出发&#xff0c;详…

Spring WebSocket安全认证与权限控制解析

一、认证架构设计 1.1 WebSocket安全认证流程 #mermaid-svg-23pyTyZe6teZy3Hg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-23pyTyZe6teZy3Hg .error-icon{fill:#552222;}#mermaid-svg-23pyTyZe6teZy3Hg .error-t…

复现论文《多无人机协同任务分配算法设计与实现》

1. 论文标题 多无人机协同任务分配算法设计与实现 The Design and Implementation of Multi-UAVs Cooperative Task Assignment Algorithm 2. 内容概括 该论文针对异构多无人机协同执行多目标多类型任务时的分配问题展开研究。首先提出“两阶段”任务分配结构:第一阶段通过…

MCU-基于TC397的启动流程

TC397的启动流程(Start Sequence) 整体启动流程包括固件启动(Boot Firmware)和 Bootloader 和软件启动(Application start-up software)三个阶段。 1. Boot Firmware:是芯片上电后最开始执行的代码,代码由英飞凌供应商固化在BootRom中的,不可编程,没办法对BootRom中的…

单片机毕业设计模板|毕设答辩|毕业设计项目|毕设设计|单片机物联网毕业设计|基于STM32单片机的纱管图像识别系统设计

毕业设计题目&#xff1a;基于STM32单片机的纱管图像识别系统设计1. 需求分析目标用户&#xff1a;纺织行业&#xff0c;自动化生产线&#xff0c;质量检测等。核心功能&#xff1a;实时识别和检测纱管的外观缺陷&#xff08;如破损、色差等&#xff09;。提供数据记录和报告功…

谷歌DeepMind发布Genie 3:通用型世界模型,可生成前所未有多样化的交互式虚拟环境

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

202506 电子学会青少年等级考试机器人二级理论综合真题

更多内容和历年真题请查看网站&#xff1a;【试卷中心 -----> 电子学会 ----> 机器人技术 ----> 二级】 网站链接 青少年软件编程历年真题模拟题实时更新 2025年6月 青少年等级考试机器人理论真题二级 第 1 题 如图&#xff0c;这是中国古代发明的指南车模型&am…

【YOLO11改进 - C3k2融合】C3k2融合EBlock(Encoder Block):低光增强编码器块,利用傅里叶信息增强图像的低光条件

YOLOv11目标检测创新改进与实战案例专栏 文章目录&#xff1a; YOLOv11创新改进系列及项目实战目录 包含卷积&#xff0c;主干 注意力&#xff0c;检测头等创新机制 以及 各种目标检测分割项目实战案例 专栏链接: YOLOv11目标检测创新改进与实战案例 文章目录YOLOv11目标检测创…

MACBOOK M1安装达梦8数据库

前提已安装好了docker 然后通过docker-compose安装 version: 2.1 services:DM8:image: qinchz/dm8-arm64:8.1.8.128container_name: dm8ports:- "52330:5236"mem_limit: 2gmemswap_limit: 2genvironment:- TZAsia/Shanghai- LANGen_US.UTF-8volumes:- /Users/a1/dock…

2013年考研数学(二)真题

一、选择题(1)考点&#xff1a;低阶无穷小定义、高阶无穷小定义、同阶无穷小定义、等阶无穷小定义、移项变形/极限存在并且分母→0时则分子也→0方法一&#xff1a;方法二&#xff1a;(2)考点&#xff1a;说不清楚的思路/凑导数定义式、洛必达法则、隐函数求导方法一&#xff1…

WinForm 复合控件(用户控件):创建与使用指南

目录 添加流程示意图 复合控件的核心价值 与自定义控件的区别 创建步骤 建好的示例控件 ​使用方法&#xff08;代码示例&#xff09; 设计原则 添加流程示意图 点击添加 添加成功 每更新一次复合控件的内容&#xff0c;就需要生成一次 ↓ 添加好复合控件后点这里更新一…

随机向量正交投影定理(Orthogonal Projection Theorem, OPT)_学习笔记

前言 随机向量正交投影定理&#xff08;Orthogonal Projection Theorem, OPT&#xff09; 是理解和推导卡尔曼了滤波&#xff08;Kalman Filtrering, KF&#xff09; 重要理论工具&#xff0c;简化卡尔曼最优滤波方程推导过程并提供数学严密性。本文介绍该定理内容及证明过程&a…

11-netty基础-手写rpc-支持多序列化协议-03

netty系列文章&#xff1a; 01-netty基础-socket02-netty基础-java四种IO模型03-netty基础-多路复用select、poll、epoll04-netty基础-Reactor三种模型05-netty基础-ByteBuf数据结构06-netty基础-编码解码07-netty基础-自定义编解码器08-netty基础-自定义序列化和反序列化09-n…

艾体宝产品 | 从“被看见”到“被信任”:GWI 协助洞察消费者,重构品牌认知

简介&#xff1a;本文介绍了基于消费者洞察构建品牌认知策略的核心方法。通过深度理解受众&#xff0c;GWI Spark 快速获取真实洞察&#xff0c;指导信息与渠道选择。GWI 帮助追踪情感与认知效果&#xff0c;避免无效曝光陷阱&#xff0c;最终帮助品牌实现从“被看见”到“被信…

Redis高级

目录 一、Redis主从 1. 主从集群结构 2. 主从同步原理 2.1 全量同步 2.2 增量同步 3. 主从同步优化 4. 总结 二、Redis哨兵 1. 哨兵工作原理 1.1 哨兵作用 1.2 状态监控 1.3 选举新的master节点 2. 总结 三、Redis分片集群 1. 散列插槽 2. 故障转移 四、Redis…

正点原子esp32s3探测土壤湿度

开发板使用&#xff1a;正点原子ATK_DNESP32S3 V1.3 IDE: VSCODE PLATFORMIO 土壤湿度检测传感器模块如下图&#xff1a; 引脚&#xff1a; 传感器VCC --> ESP32[3.3V] 传感器GND --> ESP32[GND] 传感器A0 --> ESP32[GPIO20] 代码如下&#xff1a; #include <…

一篇文章解决 Win10 同时部署多个版本的Tomcat

文章目录所用到的文件夹Tomcat服务端口修改Tomcat参数修改环境变量配置验证环境是否配置成功可能遇到的问题问题一&#xff1a;startup.bat闪退问题二&#xff1a;startup.bat成功启动&#xff0c;但仍打不开服务器总结最近在学习JavaWeb的时候&#xff0c;想安装新版本的Tomca…

CentOS7安装和使用Workbench

文章目录CentOS7安装和使用Workbench一、前言1.简介2.环境二、正文1.更换镜像源2.安装依赖包3.下载4.安装5.打开workbench6.使用记录1&#xff09;连接数据库2&#xff09;创建数据库3&#xff09;导入数据3&#xff09;导出数据4&#xff09;运行SQL脚本5&#xff09;打开SQL脚…

SpringBoot查询方式全解析

文章目录一、简介二、常用注解分类1、请求映射类&#xff08;处理 URL 与 HTTP 方法的绑定&#xff09;2、参数绑定类&#xff08;从请求中获取数据并绑定到方法参数&#xff09;3、控制器与增强类&#xff08;标识控制器及全局增强&#xff09;4、异常与响应处理类&#xff08…

Linux操作系统从入门到实战(十五)详细讲解Linux调试器 gdb/cgdb使用

Linux操作系统从入门到实战&#xff08;十五&#xff09;详细讲解Linux调试器 gdb/cgdb使用前言一、gdb/cgdb是什么&#xff1f;1. 程序的两种发布模式&#xff08;debug 和 release&#xff09;二、gdb/cgdb如何启动&#xff1f;1. 准备工作2. 启动 gdb/cgdb 调试器2.1 启动 g…