dropbox_uploader.sh
#!/bin/bash # # Dropbox Uploader Script v0.8.2 # # Copyright (C) 2010-2011 Andrea Fabrizi <andrea.fabrizi@gmail.com> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # #DROPBOX ACCOUNT #For security reasons, it is not recommended to modify this script #to hardcode a login and password. However, this can be done if #automation is necessary. LOGIN_EMAIL="z540453380@163.com" LOGIN_PASSWD="********" #Set to 1 to enable DEBUG mode DEBUG=0 #Set to 1 to enable VERBOSE mode (-v option) VERBOSE=0 #If set to 1 the script terminate if an upload error occurs END_ON_UPLOAD_ERROR=0 #Set to 1 to skip the initial login page loading (Speed up the uploading process). #Set to 0 if you experience problems uploading the files. SKIP_LOADING_LOGIN_PAGE=1 #Don't edit these... 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 tr pwd" VERSION="0.8.2" if [ $DEBUG -ne 0 ]; then set -x COOKIE_FILE="/tmp/du_cookie_debug" RESPONSE_FILE="/tmp/du_resp_debug" fi #Print verbose information depend on $VERBOSE variable function print { if [ $VERBOSE -eq 1 ]; then echo -ne "$1"; fi } #Remove temporary files function remove_temp_files { if [ $DEBUG -eq 0 ]; then rm -fr $COOKIE_FILE rm -fr $RESPONSE_FILE fi } #Extract token from the specified form # $1 = file path # $2 = form action function get_token { TOKEN=$(cat $1 | tr -d '\n' | sed 's/.*<form action="'$2'"[^>]*>\s*<input type="hidden" name="t" value="\([a-z 0-9]*\)".*/\1/') echo $TOKEN } #Upload a single file to dropbox # $1 = local file path # $2 = remote destination folder function dropbox_upload { UPLOAD_FILE=$1 DEST_FOLDER=$2 print " > Uploading '$UPLOAD_FILE' to 'DROPBOX$DEST_FOLDER'..." #Show the progress bar during the file upload if [ $VERBOSE -eq 1 ]; then CURL_PARAMETERS="--progress-bar" print "\n" else CURL_PARAMETERS="-s --show-error" fi curl $CURL_PARAMETERS -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 print " Failed!\n" if [ $END_ON_UPLOAD_ERROR -eq 1 ]; then remove_temp_files exit 1 fi else print " OK\n" fi } #Recursively upload a directory structure # $1 = remote destination folder function dropbox_upload_dir { for i in *; do if [ -f "$i" ]; then dropbox_upload "$i" "$1" fi if [ -d "$i" ]; then local OLD_PWD=$(pwd) cd "$i" dropbox_upload_dir "$1/$i" cd "$OLD_PWD" fi done } #Handles the keyboard interrupt (control-c) function ctrl_c { print "\n Bye ;)\n" remove_temp_files exit 1 } #Trap keyboard interrupt (control-c) trap ctrl_c SIGINT #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 #USAGE function usage() { echo -e "Dropbox Uploader v$VERSION" echo -e "Usage: $0 [OPTIONS]..." echo -e "\nOptions:" echo -e "\t-u [USERNAME] (required if not hardcoded)" echo -e "\t-p [PASSWORD]" echo -e "\t-f [FILE/FOLDER] (required)" echo -e "\t-d [REMOTE_FOLDER] (default: /)" echo -e "\t-v Verbose mode" remove_temp_files } # File variables UPLOAD_FILE="" DEST_FOLDER="" optn=0; while getopts "u:p:f:d:v" opt; do case $opt in u) LOGIN_EMAIL="$OPTARG" let optn++;; p) LOGIN_PASSWD="$OPTARG" let optn++;; f) UPLOAD_FILE="$OPTARG" let optn++;; d) DEST_FOLDER="$OPTARG" let optn++;; v) VERBOSE=1;; *) usage; exit 0; esac done if [ $optn -lt 1 ] || [ "$LOGIN_EMAIL" == "" ]; then usage; exit 1; fi if [ "$DEST_FOLDER" == "" ]; then DEST_FOLDER="/" fi print "Dropbox Uploader v$VERSION\n" #CHECK FILE/DIR if [ ! -r "$UPLOAD_FILE" ]; then echo -e "Please specify a valid file or directory (-f)" remove_temp_files exit 1 fi #Prompt for password if [ "$LOGIN_PASSWD" == "" ]; then read -s -p "Password: " LOGIN_PASSWD echo fi #LOAD LOGIN PAGE if [ $SKIP_LOADING_LOGIN_PAGE -eq 0 ]; then print " > Loading Login Page..." curl -s --show-error -i -o "$RESPONSE_FILE" "$LOGIN_URL" if [ $? -ne 0 ]; then print " Failed!\n" remove_temp_files exit 1 else print " OK\n" fi #GET TOKEN TOKEN=$(get_token "$RESPONSE_FILE" "\/login") #echo -e " > Token = $TOKEN" if [ "$TOKEN" == "" ]; then print " Failed to get Authentication token!\n" remove_temp_files exit 1 fi fi #LOGIN print " > Logging in..." curl -s --show-error -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 print " Failed!\n" remove_temp_files exit 1 else print " OK\n" fi #LOAD HOME print " > Loading Home..." curl -s --show-error -i -b "$COOKIE_FILE" -o "$RESPONSE_FILE" "$HOME_URL" if [ $? -ne 0 ]; then print " Failed!\n" remove_temp_files exit 1 else print " OK\n" fi #GET TOKEN TOKEN=$(get_token "$RESPONSE_FILE" "https:\/\/dl-web.dropbox.com\/upload") #echo -e " > Token = $TOKEN" if [ "$TOKEN" == "" ]; then print " Failed to get Upload token!\n" remove_temp_files exit 1 fi #If it's a single file... if [ -f "$UPLOAD_FILE" ]; then dropbox_upload "$UPLOAD_FILE" "$DEST_FOLDER" fi #If it's a directory... if [ -d "$UPLOAD_FILE" ]; then OLD_PWD=$(pwd) cd "$UPLOAD_FILE" dropbox_upload_dir "$DEST_FOLDER" cd "$OLD_PWD" fi remove_temp_files
脚本使用方法:
语法:./dropbox_uploader.sh [OPTIONS]…
选项:-u [USERNAME] dropbox用户
-p [PASSWORD] dropbox密码
-f [FILE/FOLDER] 待上传的文件或目录
-d [REMOTE_FOLDER] dropbox的目录,默认是 “/”
-v 返回详细进程模式
例子:
./dropbox_uploader.sh -u andrea.fabrizi@gmail.com -f /etc/passwd -v
./dropbox_uploader.sh -u andrea.fabrizi@gmail.com -f /var/backup/ -v
也可以在
LOGIN_EMAIL="" //邮箱账号 LOGIN_PASSWD="" //密码
添上密码 就不用-u了 如:
./dropbox_uploader.sh -f /var/backup/ -d vpsback -v
注视: /var/backup/ 是你要上传备份的路径 可以是文件 vpsback 是你dropbox 下要上传到的路径
full_files_backup.sh
#!/bin/bash #Full_Files_Backup.sh cd /home mysqldump -hlocalhost -uroot -p123456 mysql> s2logbackup.sql FullBakName=fullbak_$(date +%y%m%d).tar.gz tar zcvf $FullBakName wwwroot s2logbackup.sql sh dropbox_uploader.sh -f $FullBakName -d webfilesbackup rm -f $FullBakName rm -f s2logbackup.sql
mysqldump -hlocalhost -uroot -p123456 mysql> s2logbackup.sql
注视: localhost 是数据库地址VPS的话一般不用改 root 数据库用户名 123456数据库密码 此命令通用 不会出错
wwwroot 是/home/wwwroot 路径 请自己修改
自己的账号也发布出去了….郁闷 现在才发现