自动从夸克网盘分享链接中提取最近更新的文件并转存到自己的网盘,支持定时同步、本地下载和 AList 下载。(注:本项目完全使用DeepSeek V4 Pro生成。)
- 自动转存 — 监控多个夸克网盘分享链接,将最近更新的文件自动转存到自己的网盘
- 过滤去重 — 按更新时间窗口过滤,按"文件名+大小"自动去重,避免重复转存
- 小文件过滤 — 支持按文件大小下限过滤(
minFileSizeMB),小于指定 MB 的文件不转存 - 数量限制 — 支持每分享链接最多转存 N 条最新文件(
maxFilesPerShare) - 文件重命名 — 支持为转存文件添加前缀(如
遮天-、斗破苍穹-),便于分类管理 - 定时调度 — 支持 cron 表达式定时执行同步和下载任务
- 夸克下载 — 将夸克网盘指定文件夹的文件下载到本地
- AList 下载 — 支持从 AList 服务器下载文件到本地
- 进程锁 — download/alist 模式自动加锁,防止并发执行导致文件损坏
git clone <repo-url>
cd quark-sync
npm install复制示例配置文件并修改:
cp config.example.json config.json| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
cookie |
string | 是 | 夸克网盘登录后的完整 Cookie 字符串 |
shareUrls |
array | 是 | 分享链接列表,每项包含 url(链接,可为字符串或数组作为备用链接,按序 failover)、password(提取码,可选)、tip(文件名前缀,可选)、hours(时间窗口覆盖全局,可选) |
shareUrl |
string | 否 | 单个分享链接(与 shareUrls 二选一) |
password |
string | 否 | 默认提取码 |
tip |
string | 否 | 默认文件名前缀 |
hours |
int | 否 | 时间窗口(小时),只转存该时间范围内的文件,默认 48 |
minFileSizeMB |
int | 否 | 最小文件大小过滤(MB),小于此值的文件不转存,默认 0 不过滤 |
maxFilesPerShare |
int | 否 | 每分享最多转存文件数,按更新时间倒序取最新 N 条,默认 0 不限制 |
targetDirName |
string | 否 | 转存目标文件夹名称,默认 来自:分享 |
targetDirFid |
string | 否 | 转存目标文件夹 ID(优先级高于 targetDirName) |
downloadDir |
string | 否 | 本地下载目录路径 |
deleteAfterDownload |
bool | 否 | 下载后是否删除云盘文件 |
cleanupAfterDays |
int | 否 | 定时任务触发时,自动删除 N 天前同步的文件(云端 + 本地下载),设为 0 禁用,默认 14 |
alistUrl |
string | 否 | AList 服务器地址 |
alistPath |
string | 否 | AList 下载路径 |
alistRefresh |
bool | 否 | AList 列出文件时是否绕过缓存(需管理员权限),默认 false |
alistToken |
string | 否 | AList 认证 Token |
syncCron |
string/array | 否 | 同步任务的 cron 表达式,支持数组 |
alistCron |
string/array | 否 | AList 下载任务的 cron 表达式,支持数组 |
pageSize |
int | 否 | API 分页大小 |
pollInterval |
int | 否 | 任务轮询间隔(毫秒) |
- 浏览器打开 pan.quark.cn 并登录
- 按
F12打开开发者工具 - 进入
Application→Cookies→ 复制完整的 Cookie 字符串 - 粘贴到
config.json的cookie字段
{
"cookie": "你的夸克Cookie字符串",
"hours": 3,
"minFileSizeMB": 100,
"maxFilesPerShare": 3,
"targetDirName": "来自:分享",
"shareUrls": [
{
"url": "https://pan.quark.cn/s/xxxxxxxx",
"password": "提取码",
"tip": "遮天-",
"hours": 6
},
{
"url": "https://pan.quark.cn/s/yyyyyyyy",
"tip": "斗破苍穹-"
},
{
"url": ["https://pan.quark.cn/s/main1", "https://pan.quark.cn/s/backup1"],
"tip": "备用链接示例"
}
]
}检查所有分享链接中最近更新的文件,转存到自己的网盘:
npm start
# 或
npm run sync
# 或
node index.js将夸克网盘指定文件夹的文件下载到本地:
npm run download
# 或
node index.js download下载后会生成 .downloaded.json 记录已下载文件(按文件名+大小),下次运行时自动跳过已下载文件,防止重复下载。
如需强制重新下载所有文件,添加 --force-download 参数:
npm run download-force
# 或
node index.js download --force-download从 AList 服务器下载文件到本地:
npm run alist
# 或
node index.js alist同样支持 --force-download 强制重新下载:
npm run alist-force
# 或
node index.js alist --force-download按 cron 表达式定时执行同步和/或 AList 下载任务,持续运行:
npm run schedule
# 或
node index.js scheduleCron 配置示例:
{
"syncCron": "0 20 * * *",
"alistCron": ["5 20 * * *"],
"cleanupAfterDays": 14
}syncCron 和 alistCron 支持字符串或数组:
{
"syncCron": ["0 11 * * *", "0 20 * * *"],
"alistCron": ["5 11 * * *", "5 20 * * *"],
"cleanupAfterDays": 14
}以上配置表示每天 11:00 和 20:00 执行同步,11:05 和 20:05 执行 AList 下载。
- 加载
config.json并验证 Cookie 有效性 - 遍历
shareUrls中的每个分享链接,获取目录树(失效链接自动跳过) - 筛选出
hours时间窗口内更新的文件(可每个链接单独配置) - 按
minFileSizeMB过滤掉过小的文件 - 按
maxFilesPerShare限制数量,只保留更新时间最新的 N 条 - 与目标文件夹已有文件比对去重(按文件名 + 文件大小)
- 分批(每批 20 个)将新文件转存到目标文件夹
- 若配置了
tip前缀,自动重命名转存后的文件
- 列出网盘目标文件夹中的所有文件
- 从
.downloaded.json加载已下载记录,跳过已完成的文件(按文件名+大小匹配) - 分批(每批 10 个)获取下载地址,并行下载(并发 3 个)
- 每个文件下载成功后立即写入
.downloaded.json,即使中途中断也不会重复下载 - 若启用
deleteAfterDownload,下载后从网盘删除文件
所有运行日志写入项目根目录的 sync.log,包含时间戳和日志级别。
MIT