本文目录导读:

- 方案一:基础版(适用于快速归类下载文件夹)
- 方案二:按创建日期归类(适合照片、截图)
- 方案三:进阶版-自动监控(实时归类)
- 方案四:跨平台(Windows/macOS/Linux)- 使用 Bash 脚本
- 如何自动触发(定时运行)
- 使用建议
是的,完全可以通过脚本实现下载文件的自动归类整理,这类脚本通常被称为文件整理脚本或自动化归类脚本,能根据文件后缀、创建时间、大小等规则,将文件移动到对应文件夹。
以下是几个实用且易于实现的方案(从简单到高级):
基础版(适用于快速归类下载文件夹)
这个脚本用 Python 编写,只需几行代码,适合新手。
import os
import shutil
from pathlib import Path
# 1. 设置要整理的文件夹路径(比如浏览器的下载目录)
DOWNLOAD_DIR = Path.home() / "Downloads" # Windows: C:\Users\你的用户名\Downloads
# 如果想指定其他路径,直接写: DOWNLOAD_DIR = Path("D:/我的下载")
# 2. 定义归类规则:后缀名 -> 目标文件夹名
RULES = {
# 图片
('.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg'): '图片',
# 文档
('.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.txt'): '文档',
# 视频
('.mp4', '.avi', '.mkv', '.mov', '.flv', '.wmv'): '视频',
# 音频
('.mp3', '.wav', '.flac', '.aac', '.ogg'): '音频',
# 压缩包
('.zip', '.rar', '.7z', '.tar', '.gz'): '压缩包',
# 安装包/程序
('.exe', '.msi', '.dmg', '.pkg', '.apk'): '安装程序',
# 代码/脚本
('.py', '.js', '.html', '.css', '.java', '.cpp', '.json', '.xml'): '代码文件',
}
def organize_folder(folder_path):
"""对指定文件夹内的文件进行归类"""
folder = Path(folder_path)
if not folder.exists():
print(f"错误:文件夹 {folder_path} 不存在")
return False
moved_count = 0
for item in folder.iterdir():
# 只处理文件,跳过文件夹(避免移动子文件夹)
if not item.is_file():
continue
# 获取文件后缀(小写)
suffix = item.suffix.lower()
# 查找匹配的规则
target_dir = None
for extensions, dir_name in RULES.items():
if suffix in extensions:
target_dir = folder / dir_name
break
# 如果没匹配到任何规则,放入“其他”文件夹
if target_dir is None:
target_dir = folder / "其他"
# 创建目标文件夹(如果不存在)
target_dir.mkdir(exist_ok=True)
# 移动文件(如果目标文件已存在,自动重命名)
dest_path = target_dir / item.name
if dest_path.exists():
# 在文件名后追加时间戳避免覆盖
import time
timestamp = int(time.time())
new_name = f"{item.stem}_{timestamp}{suffix}"
dest_path = target_dir / new_name
shutil.move(str(item), str(dest_path))
print(f"已移动: {item.name} -> {target_dir.name}/")
moved_count += 1
print(f"\n归类完成!共移动 {moved_count} 个文件。")
return True
if __name__ == "__main__":
# 运行脚本
organize_folder(DOWNLOAD_DIR)
# 如果想添加定时任务,可以在这里设置循环
# input("按回车键退出...")
使用方法:
- 安装 Python(如果已安装则跳过)
- 将代码保存为
file_organizer.py - 双击运行(或
python file_organizer.py)
按创建日期归类(适合照片、截图)
有时按后缀不够直观,按日期归类更符合使用习惯:
import os
import shutil
from datetime import datetime
from pathlib import Path
def organize_by_date(source_folder):
"""
按文件的修改日期归类到 YYYY/MM 文件夹
2024/03/ 文件夹下存放2024年3月修改的文件
"""
source = Path(source_folder)
if not source.exists():
return
for item in source.iterdir():
if not item.is_file():
continue
# 获取文件最近修改时间
mtime = os.path.getmtime(item)
dt = datetime.fromtimestamp(mtime)
# 创建 YYYY/MM 层级文件夹
date_dir = source / str(dt.year) / f"{dt.month:02d}"
date_dir.mkdir(parents=True, exist_ok=True)
# 移动文件
dest = date_dir / item.name
if dest.exists():
# 避免重名
dest = date_dir / f"{item.stem}_{dt.strftime('%Y%m%d%H%M%S')}{item.suffix}"
shutil.move(str(item), str(dest))
print(f"移动: {item.name} -> {dt.year}/{dt.month:02d}/")
if __name__ == "__main__":
organize_by_date(Path.home() / "Downloads")
进阶版-自动监控(实时归类)
如果不希望手动运行,可以创建一个文件监控脚本,当有文件下载完成后自动触发归类。
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from pathlib import Path
class DownloadHandler(FileSystemEventHandler):
def __init__(self, target_folder, rules, wait_seconds=3):
self.target_folder = Path(target_folder)
self.rules = rules
self.wait_seconds = wait_seconds # 等待文件写入完成
self.recent_files = {}
def on_created(self, event):
"""当新文件创建时被触发"""
if event.is_directory:
return
file_path = Path(event.src_path)
# 忽略临时文件
if file_path.suffix.lower() in ('.tmp', '.crdownload', '.part'):
return
# 等待一下,确保文件写入完成(下载中文件不处理)
time.sleep(self.wait_seconds)
if file_path.exists():
self.move_file(file_path)
def move_file(self, file_path):
"""使用预定义的规则移动文件"""
suffix = file_path.suffix.lower()
for extensions, dir_name in self.rules.items():
if suffix in extensions:
target_dir = self.target_folder / dir_name
break
else:
target_dir = self.target_folder / "其他"
target_dir.mkdir(exist_ok=True)
dest = target_dir / file_path.name
if dest.exists():
import shutil
dest = target_dir / f"{file_path.stem}_{int(time.time())}{suffix}"
file_path.rename(dest) # 同分区下 rename 更快
print(f"[监控] 已归类: {file_path.name} -> {dir_name}")
# 使用上述RULES(与方案一相同)
if __name__ == "__main__":
download_folder = Path.home() / "Downloads"
event_handler = DownloadHandler(download_folder, RULES)
observer = Observer()
observer.schedule(event_handler, str(download_folder), recursive=False)
observer.start()
print(f"开始监控: {download_folder}")
print("按 Ctrl+C 停止...")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
注意: 运行前需安装 watchdog 库:
pip install watchdog
跨平台(Windows/macOS/Linux)- 使用 Bash 脚本
如果你不想用 Python,纯粹的系统命令也可以实现:
Bash 脚本(适用于 macOS/Linux)
#!/bin/bash
# 保存为 organize_downloads.sh
TARGET_DIR="$HOME/Downloads"
# 归类函数
organize() {
local ext="$1" folder="$2"
mkdir -p "$TARGET_DIR/$folder"
find "$TARGET_DIR" -maxdepth 1 -type f -iname "*.$ext" -exec mv {} "$TARGET_DIR/$folder/" \;
}
# 执行归类
organize "jpg" "图片" & organize "png" "图片" & organize "gif" "图片"
organize "pdf" "文档" & organize "doc" "文档" & organize "docx" "文档"
organize "mp4" "视频" & organize "avi" "视频"
organize "zip" "压缩包" & organize "rar" "压缩包"
wait # 等待所有后台任务完成
echo "归类完成!"
Windows PowerShell 脚本
# 保存为 organize.ps1
$target = "$env:USERPROFILE\Downloads"
# 创建文件夹
@("图片", "文档", "视频", "压缩包", "其他") | ForEach-Object {
New-Item -ItemType Directory -Path "$target\$_" -Force | Out-Null
}
# 移动文件
Move-Item "$target\*.jpg", "$target\*.png", "$target\*.gif" -Destination "$target\图片\" -ErrorAction SilentlyContinue
Move-Item "$target\*.pdf", "$target\*.doc*", "$target\*.xls*" -Destination "$target\文档\" -ErrorAction SilentlyContinue
Move-Item "$target\*.mp4", "$target\*.avi" -Destination "$target\视频\" -ErrorAction SilentlyContinue
Move-Item "$target\*.zip", "$target\*.rar" -Destination "$target\压缩包\" -ErrorAction SilentlyContinue
Write-Host "归类完成!"
如何自动触发(定时运行)
Windows 用户:
- 打开 任务计划程序
- 创建基本任务,触发器设为“登录时”或每天固定时间
- 操作选择“启动程序”,程序路径设为
python,参数设为脚本路径
macOS/Linux 用户:
使用 crontab:
# 每天凌晨2点运行 0 2 * * * /usr/bin/python3 /path/to/your/organize_script.py
浏览器下载完成时自动触发(更精准):
- Chrome:搭配插件如
Download Manager或Auto Download Organizer - QQ 旋风/迅雷:许多下载软件支持“下载完成后运行脚本”
使用建议
- 先测试后使用:建议先在小范围文件夹测试,确认规则符合预期。
- 分类规则灵活调整:根据自己的使用习惯,增删
RULES中的条目。 - 处理大文件:如果单个文件很大(如几十GB视频),建议移动而不是复制,这样更快。
- 备份重要文件:虽然脚本安全,但极少数情况下可能出现意外,第一次使用前建议备份下载文件夹。
如果需要更复杂的规则(如根据文件名关键字、文件大小、权限等归类),告诉我你的具体使用场景,我可以帮你定制脚本。