baidupan-cli
v0.2.0
Published
CLI tool for Baidu Pan (Baidu Netdisk) file management - 百度网盘命令行工具,支持上传、下载、文件管理
Downloads
72
Maintainers
Readme
baidupan-cli
基于命令行的百度网盘管理工具,支持上传、下载、列出文件等操作。
安装
# 全局安装
npm install -g baidupan-cli
# 或使用 pnpm
pnpm add -g baidupan-cli首次配置
1. 获取百度开发者凭证
- 访问 百度网盘开放平台
- 创建应用并获取
App Key和Secret Key - 在应用设置中添加回调地址(如使用默认
oob模式则无需配置)
2. 授权认证
# 方式 1:通过参数指定
baidupan-cli auth -k <app-key> -s <secret-key>
# 方式 2:通过环境变量
export BAIDU_APP_KEY=<app-key>
export BAIDU_SECRET_KEY=<secret-key>
baidupan-cli auth授权流程:
- 程序会显示授权链接并自动打开浏览器
- 在百度页面完成授权
- 从浏览器复制
code参数值 - 在终端中输入授权码完成认证
认证成功后,Token 会自动保存到本地配置文件,后续操作无需重复认证。
命令说明
全局参数
所有命令都支持以下全局参数:
| 参数 | 别名 | 说明 |
|------|------|------|
| --quiet | -q | 安静模式,减少输出 |
| --verbose | -v | 详细模式,显示调试信息 |
list - 列出文件
列出百度网盘中的文件和目录。
# 列出根目录
baidupan-cli list
# 列出指定目录
baidupan-cli list /path/to/directory
# 按修改时间降序排列
baidupan-cli list / -o time -d
# 按大小升序排列
baidupan-cli list / -o size
# 输出 JSON 格式(便于管道处理)
baidupan-cli list / --json参数:
| 参数 | 别名 | 说明 | 默认值 |
|------|------|------|--------|
| path | - | 目录路径(位置参数) | / |
| --order | -o | 排序方式:name, time, size | name |
| --desc | -d | 降序排列 | false |
| --json | -j | 输出 JSON 格式 | false |
upload - 上传文件
将本地文件或目录上传到百度网盘。
# 上传单个文件
baidupan-cli upload ./file.txt /remote/file.txt
# 上传到指定目录
baidupan-cli upload ./file.txt /remote/path/
# 上传整个目录
baidupan-cli upload ./local-dir /remote/backup/
# 从标准输入读取并上传
echo "hello" | baidupan-cli upload - /remote/hello.txt
cat data.json | baidupan-cli upload - /remote/data.json
# 指定并发数(提升大文件上传速度)
baidupan-cli upload ./large-file.zip /remote/ -c 5参数:
| 参数 | 别名 | 说明 | 默认值 |
|------|------|------|--------|
| local | - | 本地路径(位置参数),使用 - 表示 stdin | 必填 |
| remote | - | 远程路径(位置参数) | 必填 |
| --concurrency | -c | 分块上传并发数 | 3 |
download - 下载文件
从百度网盘下载文件或目录到本地。
# 下载文件到当前目录
baidupan-cli download /remote/file.txt
# 下载文件到指定路径
baidupan-cli download /remote/file.txt ./local-file.txt
# 下载到指定目录
baidupan-cli download /remote/file.txt ./downloads/
# 递归下载整个目录
baidupan-cli download /remote/directory ./local-dir -r参数:
| 参数 | 别名 | 说明 | 默认值 |
|------|------|------|--------|
| remote | - | 远程路径(位置参数) | 必填 |
| local | - | 本地保存路径(位置参数) | . |
| --recursive | -r | 递归下载目录 | false |
rm - 删除文件/目录
删除百度网盘中的文件或目录。
# 删除单个文件
baidupan-cli rm /remote/file.txt
# 删除多个文件
baidupan-cli rm /file1.txt /file2.txt /dir1/
# 使用异步模式删除
baidupan-cli rm /large-directory -a
# 输出 JSON 格式
baidupan-cli rm /file.txt --json参数:
| 参数 | 别名 | 说明 | 默认值 |
|------|------|------|--------|
| paths | - | 要删除的路径(位置参数,支持多个) | 必填 |
| --async | -a | 使用异步模式 | false |
| --json | -j | 输出 JSON 格式 | false |
mv - 移动/重命名文件
移动或重命名百度网盘中的文件/目录。
# 移动文件到另一个目录
baidupan-cli mv /old/file.txt /new/
# 移动并重命名
baidupan-cli mv /old/file.txt /new/newname.txt
# 重命名(在同一目录下)
baidupan-cli mv /dir/file.txt /dir/newname.txt
# 覆盖已存在的文件
baidupan-cli mv /file.txt /dest/ --ondup overwrite
# 使用异步模式
baidupan-cli mv /large-dir /new-location -a参数:
| 参数 | 别名 | 说明 | 默认值 |
|------|------|------|--------|
| source | - | 源路径(位置参数) | 必填 |
| dest | - | 目标路径(位置参数) | 必填 |
| --ondup | - | 冲突处理:fail/newcopy/overwrite/skip | fail |
| --async | -a | 使用异步模式 | false |
| --json | -j | 输出 JSON 格式 | false |
cp - 复制文件/目录
复制百度网盘中的文件或目录。
# 复制文件到另一个目录
baidupan-cli cp /source/file.txt /backup/
# 复制并重命名
baidupan-cli cp /file.txt /backup/file-backup.txt
# 重命名复制(在同一目录下)
baidupan-cli cp /file.txt /file-copy.txt
# 如果存在则跳过
baidupan-cli cp /file.txt /dest/ --ondup skip
# 使用异步模式(复制大目录时推荐)
baidupan-cli cp /large-directory /backup/ -a参数:
| 参数 | 别名 | 说明 | 默认值 |
|------|------|------|--------|
| source | - | 源路径(位置参数) | 必填 |
| dest | - | 目标路径(位置参数) | 必填 |
| --ondup | - | 冲突处理:fail/newcopy/overwrite/skip | fail |
| --async | -a | 使用异步模式 | false |
| --json | -j | 输出 JSON 格式 | false |
rename - 重命名文件/目录
重命名百度网盘中的文件或目录(mv 的便捷替代)。
# 重命名文件
baidupan-cli rename /path/oldname.txt newname.txt
# 重命名目录
baidupan-cli rename /path/old-dir new-dir
# 如果存在则覆盖
baidupan-cli rename /file.txt newname.txt --ondup overwrite参数:
| 参数 | 别名 | 说明 | 默认值 |
|------|------|------|--------|
| path | - | 要重命名的文件/目录路径(位置参数) | 必填 |
| newname | - | 新名称(位置参数) | 必填 |
| --ondup | - | 冲突处理:fail/newcopy/overwrite/skip | fail |
| --async | -a | 使用异步模式 | false |
| --json | -j | 输出 JSON 格式 | false |
auth - 授权认证
获取百度网盘授权。
baidupan-cli auth -k <app-key> -s <secret-key>
# 使用自定义回调地址
baidupan-cli auth -k <app-key> -s <secret-key> -r https://example.com/callback参数:
| 参数 | 别名 | 说明 | 默认值 |
|------|------|------|--------|
| --appKey | -k | 百度 App Key | 环境变量 |
| --secretKey | -s | 百度 Secret Key | 环境变量 |
| --redirectUri | -r | 回调地址 | oob |
命令别名
| 别名 | 完整命令 |
|------|----------|
| ls | list |
| up | upload |
| dl | download |
| rm | delete |
| mv | move |
| cp | copy |
环境变量
| 变量名 | 说明 |
|--------|------|
| BAIDU_APP_KEY | 百度 App Key |
| BAIDU_SECRET_KEY | 百度 Secret Key |
| BAIDU_ACCESS_TOKEN | Access Token(可选,优先级高于配置文件) |
| BAIDU_REFRESH_TOKEN | Refresh Token(可选) |
配置文件
认证信息默认保存在:
- Windows:
%USERPROFILE%\.baidupan-cli\config.json - macOS/Linux:
~/.baidupan-cli/config.json
配置文件格式:
{
"access_token": "...",
"refresh_token": "...",
"app_key": "...",
"secret_key": "...",
"expires_at": 1234567890000
}Token 过期后会自动刷新并保存。
使用示例
备份本地目录到网盘
# 备份项目目录
baidupan-cli upload ./my-project /备份/my-project/网盘文件管理
# 删除文件
baidupan-cli rm /old-file.txt
# 重命名文件
baidupan-cli rename /file.txt document.txt
# 或使用 mv
baidupan-cli mv /file.txt /document.txt
# 移动文件到另一个目录
baidupan-cli mv /temp/file.txt /documents/
# 复制文件备份
baidupan-cli cp /important.doc /backups/important-backup.doc
# 批量删除
baidupan-cli rm /temp/file1.txt /temp/file2.txt /temp/old/
# 递归复制整个目录(异步模式)
baidupan-cli cp /projects/myapp /backups/myapp -a在 Node.js 脚本中使用
import { execSync, spawn } from 'node:child_process'
// 上传文件
execSync('baidupan-cli upload ./data.json /备份/data.json')
// 获取文件列表并处理
const result = execSync('baidupan-cli list /path --json', { encoding: 'utf-8' })
const files = JSON.parse(result)
const largeFiles = files.filter(f => f.size > 1000000)
console.log('大文件:', largeFiles)
// 通过 stdin 上传动态内容
const data = JSON.stringify({ time: Date.now(), data: '...' })
const child = spawn('baidupan-cli', ['upload', '-', '/备份/snapshot.json'])
child.stdin.write(data)
child.stdin.end()定时备份(使用 node-cron)
import { execSync } from 'node:child_process'
import cron from 'node-cron'
// 每天凌晨 2 点执行备份
cron.schedule('0 2 * * *', () => {
execSync('baidupan-cli upload /data/backup /备份/daily/')
console.log('备份完成:', new Date().toISOString())
})故障排除
授权问题
- 确认 App Key 和 Secret Key 正确
- 如使用自定义回调地址,确保已在百度开放平台添加
网络问题
- 确认能正常访问百度网盘 API
- 工具已配置自动重试机制(3 次重试,指数退避)
文件操作
- 远程路径需以
/开头 - 大文件上传会自动分块,请耐心等待
- 支持秒传(相同文件无需重复上传)
License
MIT
