这是一个用于跨平台文件预处理的轻量级 Python 工具,适用于任何需要整理文件名的场景。
主要解决从 macOS 系统拷贝、解压或上传文件到 Linux/Windows 服务器时常见的两个通用问题:
- 删除垃圾文件:自动清理 macOS 产生的
._开头的隐藏索引文件(AppleDouble files),以及.DS_Store系统文件,这些文件在非 Mac 系统中不仅无用,还常导致程序读取错误。 - 规范化命名:递归将文件名和文件夹名中的空格替换为下划线 (
_),解决命令行工具、脚本批处理或代码读取文件时的路径解析报错问题。
在日常开发、数据分析或服务器运维中,文件命名规范至关重要。
- 空格的危害:许多命令行工具(如 Bash, Makefiles)和编程语言在处理带空格的路径时需要繁琐的转义。如果文件名包含空格,批量处理脚本往往会意外中断。
- macOS 的“幽灵”文件:macOS 文件系统会自动生成以
._开头的隐藏文件以及.DS_Store文件来存储元数据。当这些文件被传输到 Linux 服务器时,它们不仅占用 inode,还会被许多自动化程序误认为是有效数据文件(如误读为图片、文本或代码文件),从而引发UnicodeDecodeError或格式错误。
本工具最初为生物信息学数据清洗设计,但完全适用于任何需要批量规范文件结构的项目,如:
- 整理数据集 (Dataset Organization)
- Web 服务器文件上传预处理
- 代码仓库清理
- 批量归档文档
- 🛡️ 安全模式:支持
--dry-run预览模式,先看后改,防止误操作。 - 📝 日志记录:自动生成日志文件,记录每一个被删除或重命名的文件,支持自定义日志路径。
- 🌳 递归处理:自动遍历所有子文件夹,无论目录结构多深。
- 🔄 逻辑严谨:采用倒序遍历(Bottom-up),优先处理子文件,最后处理父目录,避免因父目录改名导致的子路径失效问题。
确保已安装 Python 3:
python3 --version下载 clean_files.py 到你的服务器或本地。
基本用法(日志保存在当前目录):
python3 clean_files.py <你的目标文件夹路径>示例:清理一个包含文档和图片的目录
python3 clean_files.py ./my_project_assets指定日志文件位置:
python3 clean_files.py ./my_dataset --log /tmp/cleaning_record.log预览模式 (推荐首次运行时使用): 如果你不敢确定会删掉什么,加上 --dry-run 参数,工具只会列出计划的操作而不执行:
python3 clean_files.py ./my_dataset --dry-run运行前:
my_project_assets/
├── .DS_Store <-- macOS 垃圾文件
├── ._Presentation Deck/ <-- macOS 垃圾隐藏文件
├── Presentation Deck/ <-- 带空格的目录
│ ├── ._image 01.png <-- macOS 垃圾隐藏文件
│ └── image 01.png <-- 带空格的文件
└── raw data/运行后:
my_project_assets/
├── Presentation_Deck/ <-- 目录空格已修复
│ └── image_01.png <-- 文件空格已修复,垃圾文件已删除
└── raw_data/ <-- 目录空格已修复日志输出示例:
2026-01-13 23:49:17,886 - INFO - [删除垃圾文件] .DS_Store
2026-01-13 23:49:17,886 - INFO - [删除垃圾文件] ._image 01.png
2026-01-13 23:49:17,886 - INFO - [重命名文件] image 01.png -> image_01.png
2026-01-13 23:49:17,886 - INFO - [重命名目录] Presentation Deck -> Presentation_DeckMIT License