如何用Bash编写IF语句检查SharePoint Online文件存在性
要实现自动判断FOLDERX中存在FileA.csv还是FileB.csv,你需要先通过Microsoft Graph API的文件元数据查询接口验证文件是否存在,再执行对应的下载逻辑。具体实现如下:
核心思路
使用Graph API的元数据接口(而非下载接口)检查文件是否存在:
- 接口地址:
https://graph.microsoft.com/v1.0/drives/<driveID>/root:/FOLDERX/FileA.csv - 通过curl返回的HTTP状态码判断:返回200表示文件存在,返回404表示文件不存在
完整脚本
#!/bin/bash # 获取API令牌(保留你原有获取逻辑) TOKEN=$(<获取API令牌的curl命令>) # 检查FileA.csv是否存在,仅获取HTTP状态码 FILE_A_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \ -H "Authorization: Bearer ${TOKEN}" \ "https://graph.microsoft.com/v1.0/drives/<driveID>/root:/FOLDERX/FileA.csv") # 根据检查结果执行下载 if [ "${FILE_A_STATUS}" -eq 200 ]; then # FileA存在,下载并保存为本地FileA.csv curl -L -X GET "https://graph.microsoft.com/v1.0/drives/<driveID>/root:/FOLDERX/FileA.csv:/content" \ -H "Authorization: Bearer ${TOKEN}" > FileA.csv else # FileA不存在,下载FileB并保存为本地FileA.csv curl -L -X GET "https://graph.microsoft.com/v1.0/drives/<driveID>/root:/FOLDERX/FileB.csv:/content" \ -H "Authorization: Bearer ${TOKEN}" > FileA.csv fi
关键参数说明
-s:静默模式,不输出curl的进度信息-o /dev/null:丢弃接口返回的元数据内容,只保留状态码输出-w "%{http_code}":指定curl仅输出HTTP响应状态码,用于后续判断-eq 200:判断状态码是否为200(文件存在的成功响应)
补充说明
如果需要更严谨的逻辑,可以额外处理令牌过期(状态码401)、服务器错误(5xx)等情况,但基于你描述的API调用正常的前提,上述逻辑已能满足需求。
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

