一个功能强大的115网盘文件自动移动工具,支持 Docker 部署,可自动监控和移动文件。
- 🔄 自动监控:定期检查指定目录,自动移动符合条件的文件
- 📏 智能筛选:根据文件大小自动筛选,避免误操作小文件
- 📁 递归扫描:自动遍历子目录,无需手动处理
- ⏰ 可配置间隔:自定义检查间隔时间
- 📝 完整日志:详细的操作日志,支持自动清理
- 🐳 Docker 部署:开箱即用,无需配置环境
- 创建
docker-compose.yml文件:
version: '3.8'
services:
move_items:
image: hazard084/115-move-items:latest
container_name: 115_move_items
restart: unless-stopped
network_mode: host # 使用宿主机网络(解决代理问题)
environment:
# 必填:115网盘的Cookie
- COOKIE=你的115网盘Cookie
# 方式1:多组路径映射(推荐)
- PATH_MAPPINGS=/待处理/下载->/已完成/视频,/临时/缓存->/归档/2024
# 方式2:单组映射(二选一,兼容旧版)
# - SOURCE_PATH=/待处理/下载
# - TARGET_PATH=/已完成/视频
# 可选:排除特定后缀的文件
- EXCLUDE_EXTENSIONS=.txt,.nfo,.jpg,.png,.srt
# 可选:检查间隔(分钟),默认5分钟
- CHECK_INTERVAL=5
# 可选:最小文件大小,支持 KB/MB/GB/TB,默认200MB
- MIN_FILE_SIZE=200MB
# 可选:日志保留天数,默认7天
- LOG_RETENTION_DAYS=7
# 可选:时区设置
- TZ=Asia/Shanghai
volumes:
# 日志目录映射(可选)
- ./logs:/app/logs
# 数据目录映射(持久化cookie)
- ./data:/app/data- 启动服务:
docker-compose up -d- 查看日志:
# 查看实时日志
docker-compose logs -f
# 查看历史日志
ls logs/docker run -d \
--name 115_move_items \
--restart unless-stopped \
--network host \
-e COOKIE='你的115网盘Cookie' \
-e PATH_MAPPINGS='/待处理/下载->/已完成/视频,/临时/缓存->/归档/2024' \
-e EXCLUDE_EXTENSIONS='.txt,.nfo,.jpg,.png' \
-e CHECK_INTERVAL=5 \
-e MIN_FILE_SIZE=200MB \
-e LOG_RETENTION_DAYS=7 \
-e TZ=Asia/Shanghai \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/data:/app/data \
hazard084/115-move-items:latest| 变量名 | 必填 | 默认值 | 说明 |
|---|---|---|---|
COOKIE |
✅ | - | 115网盘的Cookie |
PATH_MAPPINGS |
⭐ | - | 多组路径映射(推荐)格式: 源1->目标1,源2->目标2 |
SOURCE_PATH |
⭐ | - | 源目录路径(单组映射,兼容旧版) |
TARGET_PATH |
⭐ | - | 目标目录路径(单组映射,兼容旧版) |
EXCLUDE_EXTENSIONS |
❌ | - | 排除的文件后缀,如: .txt,.tmp,.log |
CHECK_INTERVAL |
❌ | 5 | 检查间隔(分钟),最少2分钟 |
MIN_FILE_SIZE |
❌ | 200MB | 最小文件大小(KB/MB/GB/TB) |
LOG_RETENTION_DAYS |
❌ | 7 | 日志保留天数 |
API_TIMEOUT |
❌ | 120 | API请求超时时间(秒),最少10秒 |
API_RETRY_TIMES |
❌ | 3 | API请求失败重试次数(1-10次) |
BARK_URL |
❌ | - | Bark通知URL,仅失败时通知,格式: https://api.day.app/你的key |
CALLBACK_URL |
❌ | - | 文件移动后的回调URL,用于触发外部系统刷新 |
MODE |
❌ | auto | 运行模式(目前只支持 auto) |
TZ |
❌ | Asia/Shanghai | 时区设置 |
注意:
PATH_MAPPINGS和SOURCE_PATH/TARGET_PATH二选一即可。推荐使用PATH_MAPPINGS支持多组映射。
使用 PATH_MAPPINGS 可以配置多组源目录到目标目录的映射:
environment:
- PATH_MAPPINGS=/待处理/下载->/已完成/视频,/临时/缓存->/归档/2024,/新增/测试->/备份/测试格式说明:
- 使用
->分隔源路径和目标路径 - 使用
,分隔多组映射 - 示例:
源路径1->目标路径1,源路径2->目标路径2
Docker Compose 完整示例:
version: '3.8'
services:
move_items:
image: hazard084/115-move-items:latest
container_name: 115_move_items
restart: unless-stopped
network_mode: host
environment:
- COOKIE=你的115网盘Cookie
# 多组路径映射(推荐)
- PATH_MAPPINGS=/待处理/下载->/已完成/视频,/临时/缓存->/归档/2024
# 排除特定后缀的文件
- EXCLUDE_EXTENSIONS=.txt,.nfo,.jpg,.png
- CHECK_INTERVAL=5
- MIN_FILE_SIZE=200MB
- LOG_RETENTION_DAYS=7
- TZ=Asia/Shanghai
volumes:
- ./logs:/app/logs
- ./data:/app/data使用 EXCLUDE_EXTENSIONS 可以排除特定后缀的文件不进行移动:
environment:
# 排除文本文件和临时文件
- EXCLUDE_EXTENSIONS=.txt,.tmp,.log
# 排除图片和字幕文件
- EXCLUDE_EXTENSIONS=.jpg,.png,.nfo,.srt
# 也可以不带点号
- EXCLUDE_EXTENSIONS=txt,tmp,log使用 BARK_URL 可以在操作失败时接收推送通知(仅失败时通知):
environment:
# 配置 Bark 通知 URL
- BARK_URL=https://api.day.app/你的Bark密钥如何获取 Bark URL:
- 在 iPhone/iPad 上下载安装 Bark App
- 打开 App,复制顶部显示的推送 URL
- URL 格式如:
https://api.day.app/xxxxxxxxxxxxx
通知时机:
- ✅ 仅在以下情况发送通知:
- API 请求超时(重试3次后仍失败)
- API 请求错误(重试3次后仍失败)
- Cookie 失效检测
- ❌ 正常运行时不会发送通知
使用 CALLBACK_URL 可以在每次定时任务有文件移动后触发外部系统刷新:
environment:
# 配置回调 URL
- CALLBACK_URL=http://192.168.0.106:9537/api/sync/lift_by_token?token=cloud_media_sync&type=lift_sync使用场景:
- 通知 Emby/Jellyfin/Plex 媒体库刷新
- 触发其他自动化工具执行
- 同步文件列表到其他系统
触发时机:
- ✅ 每轮定时任务完成后,如果有文件成功移动,则访问回调URL
- ❌ 如果本轮没有移动任何文件,不会触发回调
示例配置:
version: '3.8'
services:
move_items:
image: hazard084/115-move-items:latest
container_name: 115_move_items
restart: unless-stopped
network_mode: host
environment:
- COOKIE=你的115Cookie
- PATH_MAPPINGS=/待处理/下载->/已完成/视频
# 文件移动后触发Emby刷新
- CALLBACK_URL=http://192.168.1.100:8096/emby/Library/Refresh
volumes:
- ./logs:/app/logs
- ./data:/app/data如果只需要一组映射,可以继续使用旧的配置方式:
environment:
- SOURCE_PATH=/待处理/下载
- TARGET_PATH=/已完成/视频- 访问 https://115.com 并登录
- 按
F12打开开发者工具 - 切换到
Network(网络)标签 - 刷新页面,选择任意请求
- 在请求头中找到
Cookie字段 - 复制完整的 Cookie 值
- 路径必须以
/开头 - 路径严格区分大小写
- 示例:
/我的文件/视频/电影
.
├── logs/ # 日志文件目录(映射到宿主机)
│ ├── move_items_20241118.log
│ └── move_items_20241117.log
└── data/ # 数据目录(持久化 cookie)
└── cookies.txt
docker ps | grep 115_move_itemsdocker-compose stop
# 或
docker stop 115_move_itemsdocker-compose restart
# 或
docker restart 115_move_items# 拉取最新镜像
docker pull hazard084/115-move-items:latest
# 重新创建容器
docker-compose up -ddocker-compose down
# 或
docker rm -f 115_move_items# 使用 docker-compose
docker-compose logs -f
# 使用 docker
docker logs -f 115_move_items
# 查看最近100行
docker logs --tail 100 115_move_items日志文件保存在 logs/ 目录,按天分割:
# 查看日志文件列表
ls -lh logs/
# 查看特定日期的日志
cat logs/move_items_20241118.log- 路径检查:路径输入时请仔细检查大小写
- 递归扫描:程序会遍历源目录的所有子目录
- 操作不可逆:移动操作不可逆,请谨慎配置
- 先行测试:建议先在测试目录验证功能
- Cookie 有效期:Cookie 可能过期,需要定期更新
- 网络要求:需要能够访问 115.com
# 查看容器日志
docker logs 115_move_items
# 检查环境变量配置
docker inspect 115_move_items | grep -A 20 Env如果容器启动后卡在 "正在验证Cookie..." 步骤:
原因:使用了全局代理(VPN/TUN),Docker 容器无法正确使用代理
解决方案:使用宿主机网络模式(已在上面的示例中包含)
# docker-compose.yml 中添加
network_mode: host或在 docker run 命令中添加:
--network host现象:扫描目录时卡住,或者频繁出现超时错误
解决方案:调整超时和重试配置
environment:
# 增加超时时间(默认120秒)
- API_TIMEOUT=180
# 增加重试次数(默认3次)
- API_RETRY_TIMES=5说明:
API_TIMEOUT: 单次API请求的最大等待时间(秒),建议范围 10-120API_RETRY_TIMES: API失败后的重试次数,建议范围 1-10- 程序会在每次重试之间自动增加等待时间
- 超时的操作不会中断整个程序,会跳过继续处理下一个
注意:
- Windows 系统下超时机制基于网络库自身超时,可能不够精确
- Linux/Unix 系统使用信号机制,超时控制更准确
程序会自动检测 Cookie 是否失效:
- 每10轮检查会验证一次 Cookie 状态
- 移动文件时如果遇到认证错误会立即提醒
- 发现 Cookie 失效后程序会停止并提示更新步骤
更新 Cookie 的步骤:
- 重新获取 Cookie(见上面的获取方法)
- 更新配置(选择其中一种方式):
# 方式1:修改环境变量(推荐)
# 编辑 docker-compose.yml,更新 COOKIE 环境变量
vim docker-compose.yml
docker-compose restart
# 新 Cookie 会自动覆盖持久化文件中的旧 Cookie
# 方式2:删除持久化文件
rm data/115-cookies.txt
# 然后修改 docker-compose.yml 并重启
docker-compose restartCookie 优先级:
- ✅ 优先使用环境变量中的 Cookie
- ✅ 环境变量为空时,从
data/115-cookies.txt读取 - ✅ Cookie 验证成功后会自动保存/更新到文件
- 检查源目录和目标目录路径是否正确
- 检查文件大小是否满足
MIN_FILE_SIZE条件 - 查看日志文件了解详细信息
如果你想自己构建 Docker 镜像:
# 克隆仓库
git clone https://github.com/Hazard804/115_move_items.git
cd 115_move_items
# 构建镜像
docker build -t 115-move-items:custom .
# 运行
docker run -d \
--name 115_move_items \
-e COOKIE='xxx' \
-e SOURCE_PATH='/xxx' \
-e TARGET_PATH='/xxx' \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/data:/app/data \
115-move-items:custom- Python 3.12:运行环境
- p115client:115网盘 API 客户端
- Docker:容器化部署
本项目仅供学习交流使用,请勿用于商业用途。
欢迎提交 Issue 和 Pull Request!
如遇问题,请:
- 查看日志文件获取详细信息
- 检查 Cookie 是否有效
- 验证路径格式是否正确
- 确认网络连接正常
- 提交 GitHub Issue 寻求帮助