我正在尝试使用 bash shell 脚本删除文件,该文件是我使用不同的 shell 脚本上传到共享谷歌驱动器的。我能够列出文件所在文件夹的内容并返回文件名和文件 ID。但是,当我尝试删除该文件时,响应显示在服务器上找不到请求的 url。 我从 shell 脚本中调用的函数如下。文件 ID 必须有效,因为它已正确回显并与通过 Google Drive 本身获取的文件的链接匹配。我正确设置了访问令牌。
我尝试了各种方法来指定应该删除/删除的文件,例如使用 DELETE 而不是 POST,并通过添加来自 Google Drive 的完整链接和其他含义来使用文件 ID,但没有成功。我原以为响应会成功! #!/bin/bash
set -e
# Function to get a new access token using the refresh token
get_access_token() {
RESPONSE=$(curl -s -X POST https://oauth2.googleapis.com/token \
-d client_id=${CLIENT_ID} \
-d client_secret=${CLIENT_SECRET} \
-d refresh_token=${REFRESH_TOKEN} \
-d grant_type=refresh_token)
ACCESS_TOKEN=$(echo ${RESPONSE} | jq -r '.access_token')
echo -e "Access token acquired '${ACCESS_TOKEN}'"
}
get_drive_contents () {
DRIVE_CONTENTS=$(curl -s GET \
"https://www.googleapis.com/drive/v3/files?q='${DRIVE_ID}'+in+parents+and+trashed=false&includeItemsFromAllDrives=true&supportsAllDrives=true&fields=files(id,name,mimeType)" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Accept: application/json")
echo -e ${DRIVE_CONTENTS}
}
delete_files () {
echo $DRIVE_CONTENTS | jq -c -r '.files[]' | while read item; do
FILE_ID=$(echo ${item} | jq -r '.id')
FILENAME=$(echo ${item} | jq -r '.name')
echo "fileid=$FILE_ID filename=$FILENAME"
echo -e "Delete file request"
DELETE_RESPONSE=$(curl -s -X POST "https://www.googleapis.com/drive/v3/files/'${FILE_ID}'?supportsAllDrives=true" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"trashed": true}')
echo -e "DELETE url response: $DELETE_RESPONSE"
exit
done
}
if [ $# -ne 1 ]; then
echo "Error: list_gdrive.sh requires 1 parameter"
echo -e "Usage: $0 gdrive_full_path"
echo -e "Example gdrive full path :https://drive.google.com/drive/folders/1Jm4UDqJDDo4-frwjoHsK_qqcDHRZjDkD"
exit 1
fi
DRIVE_URL=$1
echo -e "Gdrive: $DRIVE_URL"
CLIENT_ID="xxxxxxx.apps.googleusercontent.com"
CLIENT_SECRET="xxxxxxxxxx"
REFRESH_TOKEN="xxxxxxxxxxx}
get_access_token
ACCESS_TOKEN=$(echo $RESPONSE | jq -r '.access_token')
echo -e "Access Token initialized"
get_drive_contents
delete_files
echo -e "All processing complete"
exit 0
https://www.googleapis.com/drive/v3/files/'${FILE_ID}'?supportsAllDrives=true
应该是https://www.googleapis.com/drive/v3/files/${FILE_ID}?supportsAllDrives=true
当这些点反映在您的脚本中时,请按如下方式修改您的脚本并再次测试。
DELETE_RESPONSE=$(curl -s -X POST "https://www.googleapis.com/drive/v3/files/'${FILE_ID}'?supportsAllDrives=true" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"trashed": true}')
DELETE_RESPONSE=$(curl -s -X PATCH "https://www.googleapis.com/drive/v3/files/${FILE_ID}?supportsAllDrives=true" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"trashed": true}')
${FILE_ID}
被移动到垃圾箱。${FILE_ID}
和 $ACCESS_TOKEN
是有价值的值。请注意这一点。