Задать вопрос
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.

Бекап в директорию Dropbox на сервере без скачивания остальных файлов?

Имею аккаунт на Dropbox, имею сервер.

Хочу бекапить файлы на серверев имеющуюся на аккаунте Dropbox директорию backup в корне директории Dropbox.

Попробовал воспользоваться инструкцией на сайте Dropbox и установил консольный демон. Он заработал. Выдал мне ссылку для привязки, а после выкачал все файлы моего аккаунта и на сервер.

Отсюда вопрос:

Как можно организовать бекап так, чтобы файлы, которые я использую на домашнем компьютере не выкачивались на сервер (они там не нужны и занимают много места), синхронизировалась отдельная поддиректория — backup, допустим.



Вариант с другим аккаунтом не пойдет по двум причинам: мой аккаунт и так прокачан по полной до 12 гигабайт и прокачивать второй и шарить там папки с моим не особо хочется, ну и это костыль.



Ну и да. Сервер на Linux, если кто-то еще не догадался.
  • Вопрос задан
  • 5160 просмотров
Подписаться 11 Оценить Комментировать
Решения вопроса 1
#!/bin/bash
#
# Dropbox Uploader Script v0.2
#
# by Andrea Fabrizi - andrea.fabrizi@gmail.com
# www.andreafabrizi.it/?dropbox_uploader
#
# set -x

#DROPBOX ACCOUNT
LOGIN_EMAIL="user@example.org"
LOGIN_PASSWD="password"

LOGIN_URL="https://www.dropbox.com/login"
HOME_URL="https://www.dropbox.com/home"
UPLOAD_URL="https://dl-web.dropbox.com/upload"
COOKIE_FILE="/tmp/du_cookie_$RANDOM"
RESPONSE_FILE="/tmp/du_resp_$RANDOM"
BIN_DEPS="curl sed grep"
VERSION="0.2"

#Remove temporary files
function remove_temp_files
{
rm -fr $COOKIE_FILE
rm -fr $RESPONSE_FILE
}

#Extract token from the specified form
# $1 = file path
# $2 = form action
function get_token
{
TOKEN=$(cat $1 | tr -s '\n' ' ' | sed -n -e 's/.*<form action="'$2'"[^>]*>.*<input type="hidden" name="t" value="\([a-z 0-9]*\)".*/\1/p')
echo $TOKEN
}

#CHECK DEPENDENCIES
for i in $BIN_DEPS; do
which $i > /dev/null
if [ $? -ne 0 ]; then
echo -e "Error: Required file could not be found: $i"
remove_temp_files
exit 1
fi
done

#CHECK PARAMETERS
if [ $# != 2 ]; then
echo -e " Dropbox Uploader Script v$VERSION"
echo -e " by Andrea Fabrizi - andrea.fabrizi@gmail.com"
echo -e "\n Usage:\t $0 [LOCAL_FILE] [REMOTE_FOLDER]\n"
echo -e " Example:\n\t $0 /etc/myfile.txt /\n"
remove_temp_files
exit 1
fi

#CHECK FILE
if [ ! -f $1 ]; then
echo -e "Error: $1: No such file or directory"
remove_temp_files
exit 1
fi

UPLOAD_FILE=$1
DEST_FOLDER=$2

echo -e " Dropbox Uploader Script v$VERSION\n"

#LOAD LOGIN PAGE
echo -ne " > Loading Login Page..."
curl -s -i -o $RESPONSE_FILE "$LOGIN_URL"

if [ $? -ne 0 ]; then
echo -e " Failed!"
remove_temp_files
exit 1
else
echo -e " OK"
fi

#GET TOKEN
TOKEN=$(get_token "$RESPONSE_FILE" "\/login")
#echo -e " > Token = $TOKEN"
if [ "$TOKEN" == "" ]; then
echo -e " Failed to get Authentication token!"
remove_temp_files
exit 1
fi

#LOGIN
echo -ne " > Login..."
curl -s -i -c $COOKIE_FILE -o $RESPONSE_FILE --data "login_email=$LOGIN_EMAIL&login_password=$LOGIN_PASSWD&t=$TOKEN" "$LOGIN_URL"
grep "location: /home" $RESPONSE_FILE > /dev/null

if [ $? -ne 0 ]; then
echo -e " Failed!"
remove_temp_files
exit 1
else
echo -e " OK"
fi

#LOAD HOME
echo -ne " > Loading Home..."
curl -s -i -b $COOKIE_FILE -o $RESPONSE_FILE "$HOME_URL"

if [ $? -ne 0 ]; then
echo -e " Failed!"
remove_temp_files
exit 1
else
echo -e " OK"
fi

#GET TOKEN
TOKEN=$(get_token "$RESPONSE_FILE" "https:\/\/dl-web.dropbox.com\/upload")
#echo -e " > Token = $TOKEN"
if [ "$TOKEN" == "" ]; then
echo -e " Failed to get Upload token!"
remove_temp_files
exit 1
fi

#UPLOAD
echo -ne " > Uploading file..."
curl -s -i -b $COOKIE_FILE -o $RESPONSE_FILE -F "plain=yes" -F "dest=$DEST_FOLDER" -F "t=$TOKEN" -F "file=@$UPLOAD_FILE" "$UPLOAD_URL"
grep "HTTP/1.1 302 FOUND" $RESPONSE_FILE > /dev/null

if [ $? -ne 0 ]; then
echo -e " Failed!"
remove_temp_files
exit 1
else
echo -e " OK"
fi

remove_temp_files
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
savostin
@savostin
Еще один программист
skobkin
@skobkin Автор вопроса
Гентушник, разработчик на PHP и Symfony.
Супер, спасибо. Жаль только надо хранить логин-пароль на сервере. В случае с демоном DropBox, выдается ссылка для линковки и данные аккаунта не палятся…
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы