多功能、自动化整理文件夹Python脚本

由于 Mac 下载文件夹经常性文件非常杂乱,自己动手整理又感觉很麻烦,因此制作了一个多功能脚本,可在想整理时,瞬间完成整理。现将脚本分享出来,供有需要的小伙伴使用。

以下是该脚本的功能特点与使用说明。


1. 功能特点

  • 全深度递归扫描:不仅整理目标根目录,还会穿透所有子文件夹,将散落在深层路径的文件全部提取出来。
  • 中文语义分类:根据文件扩展名,将文件自动归类至“图片”、“文档”、“安装包”、“压缩包”、“视频”、“音频”、“脚本与代码”、“设计工程”及“其他”等 9 个中文文件夹。
  • 冲突防止机制:若目标分类文件夹中已存在同名文件,脚本会自动重命名新移动的文件(例如:测试文件.pdf 变为 测试文件_1.pdf),确保数据不会被覆盖。
  • 自动清理冗余目录:在文件移动完成后,脚本会采用“自底向上”的逻辑检测并删除所有因文件移出而产生的空文件夹。
  • 系统环境适配:针对 macOS 优化,自动忽略 .DS_Store 等系统隐藏文件,且在判定文件夹是否为空时会先行排除此类干扰文件。
  • 动态路径支持:支持在执行命令时实时输入目标路径,兼容 ~(家目录)及 .(当前目录)等快捷路径符。

2. 脚本文件

脚本地址:Mac_shells/organize.py at main · zhyong26/Mac_shells

脚本内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/usr/bin/env python3
# coding=utf-8
import os
import sys
import shutil
from pathlib import Path

# --- 中文分类映射配置 ---
FILE_CATEGORIES = {
"图片": [".jpg", ".jpeg", ".png", ".gif", ".svg", ".heic", ".webp", ".raw", ".tiff"],
"文档": [".pdf", ".doc", ".docx", ".txt", ".xlsx", ".csv", ".pptx", ".pages", ".numbers", ".key", ".md"],
"安装包": [".dmg", ".pkg", ".iso", ".app"],
"压缩包": [".zip", ".tar", ".gz", ".rar", ".7z"],
"视频": [".mp4", ".mov", ".webm",".avi", ".mkv", ".wmv", ".flv"],
"音频": [".mp3", ".wav", ".aac", ".flac", ".m4a"],
"电子书": [".epub", ".mobi", ".azw3"],
"脚本与代码": [".py", ".sh", ".js", ".html", ".css", ".cpp", ".json", ".yaml", ".go", ".rs"],
"设计工程": [".psd", ".ai", ".sketch", ".fig", ".dwg"]
}

def get_unique_path(path):
"""处理同名文件冲突:若文件已存在,则添加数字后缀"""
counter = 1
original_path = path
while path.exists():
path = original_path.with_name(f"{original_path.stem}_{counter}{original_path.suffix}")
counter += 1
return path

def clean_empty_folders(target_dir, category_names):
"""递归删除空文件夹(自底向上遍历)"""
print("\n--- 正在清理空文件夹 ---")
for root, dirs, files in os.walk(target_dir, topdown=False):
current_path = Path(root)

# 跳过根目录及预设的分类文件夹
if current_path == target_dir or current_path.name in category_names:
continue

# 检查是否为空目录(排除 macOS 的隐藏文件 .DS_Store)
items = [i for i in os.listdir(current_path) if i != '.DS_Store']

if not items:
try:
# 删除可能存在的 .DS_Store 随后删除文件夹
ds_store = current_path / '.DS_Store'
if ds_store.exists():
ds_store.unlink()
current_path.rmdir()
print(f"[Deleted] 空文件夹: {current_path.relative_to(target_dir)}")
except Exception as e:
print(f"[Error] 无法删除文件夹 {current_path}: {e}")

def organize_folder(target_path_str):
target_dir = Path(target_path_str).expanduser().resolve()

if not target_dir.exists() or not target_dir.is_dir():
print(f"错误: 路径 '{target_path_str}' 不存在或不是有效的目录。")
sys.exit(1)

# 预设分类文件夹名称集合
category_names = set(FILE_CATEGORIES.keys())
category_names.add("其他")

print(f"开始整理目录: {target_dir}")

# 第一阶段:移动文件
for root, dirs, files in os.walk(target_dir):
current_path = Path(root)

# 避免进入已经生成的分类文件夹进行扫描
try:
relative_parts = current_path.relative_to(target_dir).parts
if relative_parts and relative_parts[0] in category_names:
continue
except ValueError:
pass

for file_name in files:
if file_name.startswith('.'):
continue

file_path = current_path / file_name
file_ext = file_path.suffix.lower()

target_category = "其他"
for category, exts in FILE_CATEGORIES.items():
if file_ext in exts:
target_category = category
break

dest_folder = target_dir / target_category
dest_folder.mkdir(exist_ok=True)

dest_path = get_unique_path(dest_folder / file_name)
try:
shutil.move(str(file_path), str(dest_path))
except Exception as e:
print(f"[Error] 移动失败 {file_name}: {e}")

# 第二阶段:清理空目录
clean_empty_folders(target_dir, category_names)

if __name__ == "__main__":
if len(sys.argv) < 2:
print("用法: python3 脚本名.py <目标文件夹路径>")
sys.exit(1)

organize_folder(sys.argv[1])
print("\n--- 整理及清理任务执行完毕 ---")

3. 使用说明

环境准备

  • 系统版本:macOS(或其他安装了 Python 3 的操作系统)。
  • 运行环境:需预装 Python 3.x。可通过在终端输入 python3 --version 确认。

执行步骤

  1. 保存脚本:将代码保存为文本文件,命名为 organizer.py

  2. 打开终端:启动 macOS 终端 (Terminal)。

  3. 运行命令

    输入以下指令并回车(将 [目标路径] 替换为实际文件夹路径):

    Bash

    1
    python3 organizer.py [目标路径]

示例操作

  • 整理下载文件夹

    Bash

    1
    python3 organizer.py ~/Downloads
  • 整理当前目录

    Bash

    1
    python3 organizer.py .
  • 整理特定工作目录

    Bash

    1
    python3 organizer.py /Users/YourName/Desktop/Project_Files

执行后瞬间清爽很多:
1771077624172.png
1771077656044.png


4. 注意事项与不确定性说明

  • 路径权限:若目标目录下包含受系统保护的文件或文件夹,脚本可能会因权限不足(Permission Denied)报错。此时可尝试在命令前添加 sudo(慎用)。
  • 非空判断标准:脚本在检测“空文件夹”时仅排除了 .DS_Store。如果文件夹内包含 .gitignore 或其他脚本未定义的隐藏配置文件,该文件夹将不会被删除。
  • 操作不可逆:脚本执行的是物理移动和目录删除操作(不进入废纸篓)。建议在对重要数据执行前先进行备份,或在小范围内进行测试。
  • 文件类型识别限制:分类完全基于文件后缀名。若文件无后缀或后缀不符合预设列表,将被统一归类至“其他”。

AI 总结 (Qwen API)

生成时间: 2026-02-14 22:02:13

深度总结:

该内容介绍了一个面向 macOS 用户设计的高度实用化、生产就绪型文件整理自动化工具——一个用 Python 3 编写的命令行脚本 organize.py。其核心价值在于将重复性高、易出错的手动文件归档工作,转化为一次敲击即可完成的智能、安全、可复现的操作流程

脚本并非简单地按扩展名移动文件,而是构建了一套完整的“整理-防冲突-清理”闭环逻辑:
全路径深度扫描确保不遗漏任何嵌套层级中的散落文件;
中文语义化分类体系兼顾用户直觉与实用性(如区分“安装包”“.dmg/.pkg”与“压缩包”“.zip/.7z”,而非笼统归为“归档”);
健壮的冲突解决机制(自动重命名而非覆盖/报错),保障数据完整性;
自底向上空目录清理结合 .DS_Store 过滤,精准还原目录结构清爽度;
动态路径解析能力(支持 ~.、绝对路径)显著提升交互友好性;
模块化设计与清晰注释使代码具备良好可读性、可维护性与可扩展性(如新增分类只需修改 FILE_CATEGORIES 字典)。

尤为值得注意的是,作者在技术实现中体现出对系统特性(macOS 隐藏文件)、用户心理(中文界面、即时反馈)、工程实践(错误捕获、权限提示、不可逆操作警示) 的深度考量,远超一般“玩具脚本”,已接近轻量级开源工具的标准。

同时,文档严谨标注了适用边界与潜在风险(如权限限制、隐藏文件识别盲区、后缀依赖等),体现了负责任的技术传播意识。


核心关键词标签(3–5个):

#Python自动化 #文件智能归类 #macOS效率工具 #目录结构清理 #中文语义分类