You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

通过编程从Google Drive下载时保留文件名的方法

嘿,我之前也帮人解决过一模一样的问题——批量导出Google Docs到同名Markdown,核心痛点就是保留原文件名,你之前用的curl命令踩的坑我太熟了:-O参数会傻愣愣地把URL最后一段当文件名,结果就出现了那些乱码的&exportFormat=docx后缀,手动指定ID当文件名又完全不符合需求。直接上干货,分步骤解决:

核心解决思路:三步闭环(获取原文件名 → 下载同名docx → 转同名Markdown)

1. 先搞定「获取原文件名」的核心问题

这是整个流程的关键,因为Google Docs的导出接口不会主动返回原文件名,得单独获取:

方案A:用Google Cloud CLI(最省心,不用自己写API逻辑)

先安装gcloud CLI,登录你的Google账号(确保有权限访问这些文档):

gcloud auth login

给单个文件获取原文件名的命令:

FILE_ID="你的文件ID"
ORIGINAL_NAME=$(gcloud drive files describe $FILE_ID --format="value(name)")
echo $ORIGINAL_NAME  # 输出就是Google Drive里的原文件名

方案B:纯curl+授权头(适合不想装gcloud的场景)

先获取临时访问令牌(用gcloud一键生成,不用手动申请OAuth):

ACCESS_TOKEN=$(gcloud auth print-access-token)

然后从导出接口的响应头里提取原文件名(Content-Disposition字段里藏着文件名):

FILE_ID="你的文件ID"
ORIGINAL_NAME=$(curl -H "Authorization: Bearer $ACCESS_TOKEN" -I "https://docs.google.com/document/d/$FILE_ID/export?format=docx" | grep -o 'filename="[^"]*"' | cut -d'"' -f2)

注意:如果是公开可访问的文档,直接去掉-H "Authorization: Bearer $ACCESS_TOKEN"就行。

2. 下载成带原文件名的docx

用gcloud(一步到位,自动匹配原文件名)

gcloud drive files export $FILE_ID --destination "$ORIGINAL_NAME.docx" --mime-type application/vnd.openxmlformats-officedocument.wordprocessingml.document

用curl(手动指定输出文件名)

curl -H "Authorization: Bearer $ACCESS_TOKEN" -L "https://docs.google.com/document/d/$FILE_ID/export?format=docx" -o "$ORIGINAL_NAME.docx"

重要提醒:文件名里有空格、中文或特殊字符时,必须用双引号包裹变量,不然shell会报错。

3. 把docx转成同名Markdown

用pandoc(几乎是文档格式转换的行业标准工具,先安装:sudo apt install pandoc / brew install pandoc):

pandoc "$ORIGINAL_NAME.docx" -o "$ORIGINAL_NAME.md"

可选优化:如果转换后图片、表格格式有偏差,可以加参数调整,比如--extract-media=./media把图片提取到单独文件夹,或者--reference-doc指定格式模板。

4. 批量处理脚本(一次性搞定所有文件)

把所有文件ID放到一个文本文件file_ids.txt里(每行一个ID),然后写个shell脚本batch_export.sh

#!/bin/bash

# 先获取访问令牌(公开文档可跳过此行)
ACCESS_TOKEN=$(gcloud auth print-access-token)

# 循环处理每个文件ID
while read FILE_ID; do
    # 获取原文件名(用gcloud的方式,稳定可靠)
    ORIGINAL_NAME=$(gcloud drive files describe $FILE_ID --format="value(name)")
    
    echo "正在处理:$ORIGINAL_NAME"

    # 下载docx
    gcloud drive files export $FILE_ID --destination "$ORIGINAL_NAME.docx" --mime-type application/vnd.openxmlformats-officedocument.wordprocessingml.document

    # 转成Markdown
    pandoc "$ORIGINAL_NAME.docx" -o "$ORIGINAL_NAME.md"

    # 可选:删除临时docx文件
    # rm "$ORIGINAL_NAME.docx"

done < file_ids.txt

给脚本加执行权限后运行:

chmod +x batch_export.sh
./batch_export.sh

内容的提问来源于stack exchange,提问作者Joe Shields

火山引擎 最新活动