Я пытаюсь удалить файл с помощью сценария оболочки bash, который я загрузил на общий диск Google, используя другой сценарий оболочки. Я могу перечислить содержимое папки, в которой находится файл, и вернуть имена и идентификаторы файлов. однако, когда я пытаюсь удалить файл, в ответ говорится, что запрошенный URL-адрес не найден на сервере.
Функции, которые я вызываю из сценария оболочки, приведены ниже. Идентификатор файла должен быть действительным, поскольку он отображается правильно и соответствует ссылке на файл, полученный через сам Google Диск. Я правильно устанавливаю токен доступа.
Я пробовал различные подходы, чтобы указать, что файл должен быть удален/удален, например, используя DELETE вместо POST, и экспериментировал с идентификатором файла, добавляя полную ссылку. с Google Диска и других коннотаций, но безуспешно. Я ожидал, что ответ будет успешным!
#!/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/fil ... ,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/fil ... rives=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/ ... qcDHRZjDkD"
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://stackoverflow.com/questions/787 ... -file-in-g