Очередной диск неожиданно скончался со всем нажитым непосильным трудом. Посему опять озадачился созданием архивных копий.
На этот раз создавать архивные копии будем на яндекс-диск.
Для этого создаем скрипт bash (я назвал его ya_upload.sh) следующего содержания:
#!/bin/bash
# Токен доступа к API Яндекс.Диска
accessToken="ваш токен"
# Путь к файлу, который нужно загрузить на Яндекс.Диск
fileToUpload=$1
# Путь, по которому следует загрузить файл на Яндекс.Диск
uploadDir="/Backup/"
# Получаем имя файла из пути
fileName=$(basename "$fileToUpload")
# Формируем полный путь загрузки файла
uploadPath="$uploadDir$fileName"
# Временное расширение файла для ускорения загрузки (почему-то некоторые файлы на яндекс грузятся медленно)
tmpExt=".tmp"
# URL для запроса загрузки файла
uploadRequestUrl="https://cloud-api.yandex.net/v1/disk/resources/upload?path=$uploadPath$tmpExt&overwrite=true"
# Максимальное количество попыток загрузки файла
maxRetryAttempts=3
retryCount=0
while [ $retryCount -lt $maxRetryAttempts ]; do
# GET-запрос для получения URL загрузки
response=$(curl -s -X GET -H "Authorization: OAuth $accessToken" "$uploadRequestUrl")
# Получаем URL для загрузки файла
uploadUrl=$(echo $response | jq -r '.href')
# Попытка загрузить файл на Яндекс.Диск
curl -s -X PUT -T "$fileToUpload" "$uploadUrl"
if [ $? -eq 0 ]; then
#echo "Файл успешно загружен на Яндекс.Диск."
zenity --info --text="Файл успешно загружен на Яндекс.Диск."
# Переименование файла на сервере Яндекс.Диска
moveResponse=$(curl -s -X POST \
-H "Authorization: OAuth $accessToken" \
"https://cloud-api.yandex.net/v1/disk/resources/move?path=$uploadPath&from=$uploadPath$tmpExt&overwrite=true")
break
else
zenity --info --text="Произошла ошибка при загрузке файла на Яндекс.Диск."
if [[ $response == *"Precondition Failed"* ]]; then
range=$(echo "$response" | jq -r '.Range')
startByte=$(echo "$range" | awk -F'-' '{print $2}' | awk '{print $1 + 1}')
# Догружаем недостающие части файла
curl -s -X PUT -H "Content-Range: bytes $startByte-" --data-binary "@$fileToUpload" "$uploadUrl"
zenity --info --text="Файл успешно догружен на Яндекс.Диск."
break
else
zenity --info --text="Не удалось обработать ошибку загрузки файла."
retryCount=$((retryCount+1))
if [ $retryCount -lt $maxRetryAttempts ]; then
zenity --info --text="Повторная попытка загрузки файла ($retryCount из $maxRetryAttempts)."
else
zenity --info --text="Достигнуто максимальное количество попыток загрузки файла."
fi
fi
fi
done
Скрипт не мой, я его подсмотрел у доброго человека, ссылку, к сожалению потерял. Я лишь поменял вывод сообщений в терминале на zenity.
Далее создаем в Thunar особое действие, назовем его, например так: "Отправить файл на яндекс-диск" и в качестве команды укажем:
/home/user/path/ya_upload.sh %f
Маска файла - *.*, галочки поставьте на те типы файлов, какие вам нужны.
Чтобы скрипт заработал вам необходимо:
1. получить от Яндекса токен для вашего приложения, который годен в течение года. Процедура получения токена очень проста и заняла у меня меньше 5 минут. Ее можно посмотреть, например, здесь
После получения токена его нужно прописать в ваш скрипт в строке accessToken="ваш токен", поместив его в кавычках вместо слов ваш токен.
2. Прописать путь к папке на яндекс-диске, в которую будут сыпаться ваши скопированные файлы. У меня это сделано в строке uploadDir="/Backup/"
3. Убедиться, что у вас в системе установлен zenity.
Все.
Теперь в контекстном меню Thunar появиться соответствующий пункт меню, предлагающий
Комментариев нет:
Отправить комментарий