求助:使用Unix脚本从SharePoint下载文件时遇文件损坏问题
一、先排查Curl下载损坏的常见坑
- 没开二进制传输模式:docx、pdf这类二进制文件,Curl默认可能用文本模式传输,导致文件损坏,得强制二进制写入。
- 认证方式不对:SharePoint分本地版(常用NTLM)和在线版(OAuth),普通
-u账号密码可能不生效,下回来的是登录页面而非实际文件。 - 没处理重定向:SharePoint经常会302跳转,不加
-L参数会下载跳转页面而非目标文件。
二、修复后的Curl脚本(本地SharePoint/NTLM认证)
如果你的站点用域账号NTLM认证,试试这个命令:
curl -L -k --ntlm -u "DOMAIN\你的账号:你的密码" "https://你的sharepoint地址/sites/xxx/Documents/目标文件.pdf" -o 本地文件名.pdf
参数说明:
-L:自动跟随重定向-k:临时忽略SSL证书警告(生产环境建议去掉,配置信任证书)--ntlm:启用NTLM认证,适配企业内部SharePoint-o:指定本地输出文件,确保二进制写入模式
三、SharePoint Online(云版)的OAuth认证脚本
云版SharePoint不支持NTLM,得用Azure AD应用获取令牌:
- 先在Azure AD注册应用,拿到
client_id、client_secret、tenant_id - 获取访问令牌(需要安装
jq解析JSON):
TOKEN=$(curl -X POST "https://login.microsoftonline.com/{你的tenant_id}/oauth2/v2.0/token" \ -d "client_id={你的client_id}" \ -d "scope=https://graph.microsoft.com/.default" \ -d "client_secret={你的client_secret}" \ -d "grant_type=client_credentials" | jq -r '.access_token')
- 用令牌下载文件(通过Microsoft Graph API):
curl -L -H "Authorization: Bearer $TOKEN" \ "https://graph.microsoft.com/v1.0/sites/{站点ID}/drive/items/{文件ID}/content" \ -o 本地文件名.docx
四、更省心的替代方案:用rclone
rclone专门处理云存储传输,配置一次就能直接用:
- 安装rclone:Debian/Ubuntu用
sudo apt install rclone,其他系统对应包管理命令 - 运行
rclone config,选择SharePoint类型,按提示完成认证 - 下载文件命令:
rclone copy "配置的远程名:/sites/xxx/Documents/目标文件.xlsx" ./本地文件夹/
这个方法自动处理认证、重定向和二进制传输,基本不会出现文件损坏问题。
内容的提问来源于stack exchange,提问作者SRNS
相关产品推荐
相关产品推荐

