文件预览

examples.md

查看 百度网盘 技能包中的文件内容。

文件内容

reference/examples.md

# 使用示例

本文档包含 baidu drive 的详细使用示例。

---

## 上传并分享

> ⚠️ **公开分享操作前必须用户确认**
>
> 上传 + 分享是组合操作,分享会生成对外公开的链接(默认 7 天有效期)。Agent 在执行前**必须**做到:
> 1. 列出待上传文件清单与远端目标路径
> 2. 明确告知"分享后将生成公开链接,任何持有链接+提取码的人都可访问"
> 3. 等待用户显式确认("确认"、"y"等)后再执行
> 4. 用户表达任何犹豫("再想想"、"等等")应立即中止

### 示例 1: 上传并分享单个文件

```
用户: 帮我上传并分享 ./report.pdf
AI:  即将执行以下操作:
       1) 上传 ./report.pdf → 我的应用数据/bdpan/report.pdf
       2) 创建公开分享链接(默认有效期 7 天,任何人凭链接+提取码可访问)
     是否确认?[y/N]

用户: y
AI:  [执行 bdpan upload ./report.pdf report.pdf]
     [执行 bdpan share report.pdf]

     上传并分享成功!
     链接: https://pan.baidu.com/s/1xxxxxxx
     提取码: abcd
     有效期: 7 天
```

### 示例 2: 上传并分享文件夹

```
用户: 把 ./project 文件夹上传并分享
AI:  即将执行以下操作:
       1) 上传整个 ./project/ 目录 → 我的应用数据/bdpan/project/
       2) 创建公开分享链接(默认 7 天有效期)
     ⚠️ 文件夹分享会暴露其中所有文件,请确认目录中无敏感内容。
     是否确认?[y/N]

用户: y
AI:  [执行 bdpan upload ./project/ project/]
     [执行 bdpan share project]

     文件夹上传并分享成功!
     链接: https://pan.baidu.com/s/1xxxxxxx
     提取码: efgh
     有效期: 7 天
```

### 示例 3: 上传到子目录

```
用户: 上传 ./data.tar.gz 到 backup 目录并分享
AI:  即将执行以下操作:
       1) 上传 ./data.tar.gz → 我的应用数据/bdpan/backup/data.tar.gz
       2) 创建公开分享链接(默认 7 天有效期)
     是否确认?[y/N]

用户: y
AI:  [执行 bdpan upload ./data.tar.gz backup/data.tar.gz]
     [执行 bdpan share backup/data.tar.gz]

     上传并分享成功!
     链接: https://pan.baidu.com/s/1xxxxxxx
     提取码: ijkl
     有效期: 7 天
```

---

## 下载文件

> ⚠️ **下载操作的本地风险提示**
>
> 下载会向**用户本地文件系统**写入数据:
> 1. 若目标路径已存在同名文件/目录,**会被覆盖**(bdpan 默认行为)
> 2. 若目标路径不存在,会创建新文件/目录
> 3. Agent 在执行前必须做到:① 检查本地目标路径是否已存在 → ② 如已存在则列出并请求用户确认 → ③ 才执行 `bdpan download`
> 4. 用户表达任何犹豫("等等"、"我先看看")应立即中止

### 示例 4: 下载单个文件

```
用户: 从网盘下载 report.pdf
AI:  [检查本地是否存在 ./report.pdf]
     检测到本地已存在 ./report.pdf(2026-02-25 修改),下载将覆盖该文件。
     是否继续?[y/N]

用户: y
AI:  [执行 bdpan download report.pdf ./report.pdf]

     正在下载 report.pdf → ./report.pdf ...
     ✓ 下载成功(已覆盖原文件)
```

### 示例 5: 下载文件夹

```
用户: 把 backup 文件夹下载到本地
AI:  [检查本地是否存在 ./backup/]
     ./backup/ 目录不存在,将创建新目录写入文件。
     [执行 bdpan download backup/ ./backup/]

     正在下载 backup/ → ./backup/ ...
     ✓ 下载成功
```

> 若本地目录已存在,AI 应改为列出当前目录内容,提示用户"下载会逐个覆盖同名文件",确认后再执行。

---

## 文件列表

### 示例 6: 查看已上传文件

```
用户: 查看我上传了哪些文件
AI: [执行 bdpan ls]

    类型    大小          修改时间              文件名
    ------  ------------  --------------------  --------
    目录     -            2026-02-20 10:30:00  backup
    文件    1.5 MB        2026-02-25 15:20:00  report.pdf
    文件    256 KB        2026-02-24 09:15:00  config.yaml

    共 3 项
```

### 示例 7: 查看子目录

```
用户: 查看 backup 目录下的文件
AI: [执行 bdpan ls backup]

    类型    大小          修改时间              文件名
    ------  ------------  --------------------  --------
    文件    2.1 GB        2026-02-19 08:00:00  data-2026-02-19.tar.gz
    文件    1.8 GB        2026-02-18 08:00:00  data-2026-02-18.tar.gz

    共 2 项
```

---

## JSON 输出(用于脚本)

### 示例 8: JSON 格式文件列表

```
用户: 列出所有文件名(JSON 格式)
AI: [执行 bdpan ls --json]

    输出:
    [
      {
        "Name": "report.pdf",
        "IsDir": false,
        "Size": 1536000,
        "Modified": "2026-02-25T15:20:00Z"
      },
      {
        "Name": "backup",
        "IsDir": true,
        "Size": 0,
        "Modified": "2026-02-20T10:30:00Z"
      }
    ]
```

### 示例 9: 使用 jq 处理输出

```bash
# 提取所有文件名
bdpan ls --json | jq -r '.[].Name'

# 只列出文件(排除目录)
bdpan ls --json | jq '.[] | select(.IsDir == false)'

# 按大小排序
bdpan ls --json | jq 'sort_by(.Size) | reverse'

# 检查文件是否存在
bdpan ls --json | jq -e '.[] | select(.Name == "target.txt")'
```

---

## 认证流程

### 示例 10: 登录(统一使用 login.sh 脚本)

> 登录安全约束详见 [SKILL.md](../SKILL.md) 的「安全约束」章节。

```
用户: 帮我登录百度网盘
AI: [执行 bash ${CLAUDE_SKILL_DIR}/scripts/login.sh]

    [展示安全免责声明]
    已阅读上述安全须知,确认继续登录? [y/N]

用户: y
AI: 正在获取授权链接...

    请在浏览器中打开以下链接完成授权:
    https://openapi.baidu.com/oauth/2.0/authorize?...

    授权成功后,浏览器会显示授权码,请复制并粘贴到这里:
    [等待用户输入...]

用户: [粘贴授权码] ca0ee3070f75d0246357e5c74d525bda
AI: [处理授权码]

    ✓ 登录成功!
    用户: username@baidu.com
```

---

## 转存分享文件到网盘

### 示例 15: 转存分享链接(提取码在链接中)

```
用户: 帮我把这个链接转存到网盘 https://pan.baidu.com/s/1xxxxx?pwd=abcd
AI: [执行 bdpan transfer "https://pan.baidu.com/s/1xxxxx?pwd=abcd"]

    ✓ 转存成功!
    文件已保存到:我的应用数据/bdpan/
```

### 示例 16: 转存到指定目录

```
用户: 把 https://pan.baidu.com/s/1xxxxx 转存到 shared 目录,提取码是 efgh
AI: [执行 bdpan transfer "https://pan.baidu.com/s/1xxxxx" -p efgh -d shared/]

    ✓ 转存成功!
    文件已保存到:我的应用数据/bdpan/shared/
```

### 示例 17: 转存并查看结果(JSON)

```bash
bdpan transfer "https://pan.baidu.com/s/1xxxxx?pwd=abcd" --json
# 输出:
# {
#   "status": "success",
#   "remote_path": "shared-file.pdf",
#   "share_link": "https://pan.baidu.com/s/1xxxxx",
#   "file_count": 1
# }
```

---

## 搜索文件

### 示例 18: 搜索文件

```
用户: 在网盘里搜索 report
AI: [执行 bdpan search report]

    找到 3 个结果(第 1 页,共 1 页)

    #   名称              类型    大小      修改时间
    --- ----------------- ------- --------- ----------------
    1   report.pdf        文档    1.5 MB    2026-02-25 15:20
    2   report-draft.docx 文档    256 KB    2026-02-24 09:15
    3   report-backup     目录    -         2026-02-20 10:30
```

### 示例 19: 按类型搜索

```
用户: 搜索网盘里所有的图片文件
AI: [执行 bdpan search "" --category 3 --no-dir]

    找到 5 个结果(第 1 页,共 1 页)

    #   名称              类型    大小      修改时间
    --- ----------------- ------- --------- ----------------
    1   photo.jpg         图片    3.2 MB    2026-03-15 14:30
    2   screenshot.png    图片    1.1 MB    2026-03-10 09:20
    ...
```

---

## 文件管理(移动/复制/重命名/创建文件夹)

### 示例 20: 移动文件

```
用户: 把网盘里的 report.pdf 移动到 backup 目录
AI: [执行 bdpan mv report.pdf backup]

    已移动 report.pdf -> backup
```

### 示例 21: 复制文件

```
用户: 复制 report.pdf 到 archive 目录
AI: [执行 bdpan cp report.pdf archive]

    已复制 report.pdf -> archive
```

### 示例 22: 重命名文件

```
用户: 把 draft.pdf 重命名为 final-report.pdf
AI: [执行 bdpan rename draft.pdf final-report.pdf]

    已重命名 draft.pdf -> final-report.pdf
```

### 示例 23: 创建文件夹

```
用户: 在网盘里创建一个 projects 文件夹
AI: [执行 bdpan mkdir projects]

    已创建文件夹: projects
```

### 示例 24: 组合操作——创建目录并移动文件

```
用户: 帮我在网盘里创建一个 archive/2026 目录,然后把 old-report.pdf 移动过去
AI: [执行 bdpan mkdir archive/2026]
    已创建文件夹: archive/2026

    [执行 bdpan mv old-report.pdf archive/2026]
    已移动 old-report.pdf -> archive/2026
```

---

## 高级用法

### 示例 12: 批量上传

```bash
# 上传当前目录所有 PDF 文件
for f in *.pdf; do
  bdpan upload "$f" "documents/$f"
done

# 上传并记录结果
for f in *.pdf; do
  echo "上传 $f..."
  bdpan upload "$f" "documents/$f" --json | jq '.'
done
```

### 示例 13: 自动备份脚本

```bash
#!/bin/bash
# 每日备份脚本

DATE=$(date +%Y-%m-%d)
BACKUP_FILE="backup-${DATE}.tar.gz"

# 打包
tar -czf "/tmp/${BACKUP_FILE}" ~/important-data/

# 上传
bdpan upload "/tmp/${BACKUP_FILE}" "backup/${BACKUP_FILE}"

# 清理
rm "/tmp/${BACKUP_FILE}"

echo "备份完成: ${BACKUP_FILE}"
```

### 示例 14: 检查上传状态

```bash
# 检查文件是否已上传
check_uploaded() {
  local file=$1
  bdpan ls --json | jq -e ".[] | select(.Name == \"${file}\")" > /dev/null
}

if check_uploaded "report.pdf"; then
  echo "文件已存在"
else
  echo "文件不存在,开始上传..."
  bdpan upload ./report.pdf report.pdf
fi
```