Aria2 + 自動上傳OneDrive 腳本

使用OneDriveUploader自動上傳文件到OneDrive 參考:https://www.moerats.com/archives/1006/
自動上傳腳本保存到/root/.aria2/autoUpload.sh
/root/.aria2/aria2.conf添加
on-download-complete=/root/.aria2/autoUpload.sh

#!/bin/bash
# 自動上傳腳本
GID="$1";
FileNum="$2";
File="$3";
MaxSize="15728640";
Thread="3";  #默認(rèn)3線程,自行修改,服務(wù)器配置不好的話,不建議太多
Block="20";  #默認(rèn)分塊20m,自行修改
RemoteDIR="";  #上傳到Onedrive的路徑,默認(rèn)為根目錄,如果要上傳到MOERATS目錄,""里面請?zhí)畛蒑OERATS
LocalDIR="/usr/local/Download/";  #Aria2下載目錄,記得最后面加上/
Uploader="/usr/local/bin/OneDriveUploader";  #上傳的程序完整路徑,默認(rèn)為本文安裝的目錄
Config="/root/auth.json";  #初始化生成的配置auth.json絕對路徑,參考第3步驟生成的路徑


if [[ -z $(echo "$FileNum" |grep -o '[0-9]*' |head -n1) ]]; then FileNum='0'; fi
if [[ "$FileNum" -le '0' ]]; then exit 0; fi
if [[ "$#" != '3' ]]; then exit 0; fi

function LoadFile(){
  if [[ ! -e "${Uploader}" ]]; then return; fi
  IFS_BAK=$IFS
  IFS=$'\n'
  tmpFile="$(echo "${File/#$LocalDIR}" |cut -f1 -d'/')"
  FileLoad="${LocalDIR}${tmpFile}"
  if [[ ! -e "${FileLoad}" ]]; then return; fi
  ItemSize=$(du -s "${FileLoad}" |cut -f1 |grep -o '[0-9]*' |head -n1)
  if [[ -z "$ItemSize" ]]; then return; fi
  if [[ "$ItemSize" -ge "$MaxSize" ]]; then
    echo -ne "\033[33m${FileLoad} \033[0mtoo large to spik.\n";
    return;
  fi
  ${Uploader} -c "${Config}" -t "${Thread}" -b "${Block}" -s "${FileLoad}" -r "${RemoteDIR}" -skip
  if [[ $? == '0' ]]; then
    rm -rf "${FileLoad}";
  fi
  IFS=$IFS_BAK
}
LoadFile;

aria2安裝腳本:

#!/usr/bin/env bash
# 參考https://www.moerats.com/archives/697/
# https://raw.githubusercontent.com/0oVicero0/OneDrive/master/Business/onedrive 客戶端已失效?。。。?PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

#config
filepath=$(cd "$(dirname "$0")"; pwd)
file_1=$(echo -e "${filepath}"|awk -F "$0" '{print $1}')
file="/root/.aria2"
aria2_conf="/root/.aria2/aria2.conf"
aria2_log="/root/.aria2/aria2.log"
Folder="/usr/local/aria2"
aria2c="/usr/bin/aria2c"
Crontab_file="/usr/bin/crontab"
auto_upload="/usr/local/etc/OneDrive"

#fonts color
Green_font="\033[32m" 
Red_font="\033[31m" 
Green_background="\033[42;37m" 
Red_background="\033[41;37m"  
Font="\033[0m"

Info="${Green_font}[信息]${Font}"
Error="${Red_font}[錯誤]${Font}"
Tip="${Green_font}[注意]${Font}"

#檢查ROOT權(quán)限
check_root(){
    [[ $EUID != 0 ]] && echo -e "${Error} 當(dāng)前非ROOT賬號,請切換ROOT在執(zhí)行當(dāng)前腳本${Font}" && exit 1
}

#檢查系統(tǒng)
check_sys(){
    if [[ -f /etc/redhat-release ]]; then
        release="centos"
    elif cat /etc/issue | grep -q -E -i "debian"; then
        release="debian"
    elif cat /etc/issue | grep -q -E -i "ubuntu"; then
        release="ubuntu"
    elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then
        release="centos"
    elif cat /proc/version | grep -q -E -i "debian"; then
        release="debian"
    elif cat /proc/version | grep -q -E -i "ubuntu"; then
        release="ubuntu"
    elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then
        release="centos"
    fi
    bit=`uname -m`
}

#安裝依賴環(huán)境
Installation_dependency(){
    if [[ ${release} = "centos" ]]; then
        yum update
        yum -y groupinstall "Development Tools"
        yum install nano -y
        yum install curl -y
    else
        apt-get update
        apt-get install nano build-essential curl -y
    fi
}

#獲得版本號
get_newVer(){
     aria2_new_ver=$(wget --no-check-certificate -qO- https://api.github.com/repos/q3aql/aria2-static-builds/releases | grep -o '"tag_name": ".*"' |head -n 1| sed 's/"http://g;s/v//g' | sed 's/tag_name: //g')
     if [[ -z ${aria2_new_ver} ]]; then
            echo -e "${Error} Aria2 最新版本獲取失敗,請手動獲取最新版本號[ https://github.com/q3aql/aria2-static-builds/releases ]"
            read -e -p "請輸入版本號 [ 格式如 1.34.0 ] :" aria2_new_ver
            [[ -z "${aria2_new_ver}" ]] && echo "取消..." && exit 1
        else
            echo -e "${Info} 檢測到 Aria2 最新版本為 [ ${aria2_new_ver} ]"
        fi
}

#下載aria2
download_aria2(){
     cd "/usr/local"
     if [[ ${bit} == "x86_64" ]]; then
        bit="64bit"
     elif [[ ${bit} == "i386" || ${bit} == "i686" ]]; then
        bit="32bit"
     else
        bit="arm-rbpi"
     fi
     wget -N --no-check-certificate "https://github.com/q3aql/aria2-static-builds/releases/download/v${aria2_new_ver}/aria2-${aria2_new_ver}-linux-gnu-${bit}-build1.tar.bz2"
     Aria2_Name="aria2-${aria2_new_ver}-linux-gnu-${bit}-build1"
     [[ ! -s "${Aria2_Name}.tar.bz2" ]] && echo -e "${Error} aria2 壓縮包下載失敗 !" && exit 1
     tar jxvf "${Aria2_Name}.tar.bz2"
     [[ ! -e "/usr/local/${Aria2_Name}" ]] && echo -e "${Error} Aria2 解壓失敗 !" && rm -rf "${Aria2_Name}.tar.bz2" && exit 1
     mv "/usr/local/${Aria2_Name}" "${Folder}"
     [[ ! -e "${Folder}" ]] && echo -e "${Error} aria2 文件夾重命名失敗 !" && rm -rf "${Aria2_Name}.tar.bz2" && rm -rf "/usr/local/${Aria2_Name}" && exit 1
     rm -rf "${Aria2_Name}.tar.bz2"
     cd "${Folder}"
     make install
     [[ ! -e ${aria2c} ]] && echo -e "${Error} aria2 主程序安裝失敗!" && rm -rf "${Folder}" && exit 1
     chmod +x aria2c
}

#下載aria2 配置文件
download_aria2_conf(){
     mkdir "${file}" && cd "${file}"
     wget --no-check-certificate -N "https://67zz.cn/shell/aria2.conf"
     [[ ! -s "aria2.conf" ]] && echo -e "${Error} Aria2 配置文件下載失敗 !" && rm -rf "${file}" && exit 1
     wget --no-check-certificate -N "https://67zz.cn/Aria2/dht.dat"
     [[ ! -s "dht.dat" ]] && echo -e "${Error} Aria2 DHT文件下載失敗 !" && rm -rf "${file}" && exit 1
     echo '' > aria2.session
     stty erase '^H' && read -p "請輸入aria2密鑰:" pass
     sed -i 's/^rpc-secret=67zz.cn/rpc-secret='${pass}'/g' ${aria2_conf}
     
}

#下載服務(wù)腳本
service_aria2(){
     if [[ ${release} = "centos" ]]; then
        if ! wget --no-check-certificate https://67zz.cn/shell/aria2_centos -O /etc/init.d/aria2; then
            echo -e "${Error} aria2服務(wù) 管理腳本下載失敗 !" && exit 1
        fi
        chmod +x /etc/init.d/aria2
        chkconfig --add aria2
        chkconfig aria2 on
     else
        if ! wget --no-check-certificate https://67zz.cn/shell/aria2_debian -O /etc/init.d/aria2; then
            echo -e "${Error} aria2服務(wù) 管理腳本下載失敗 !" && exit 1
        fi
        chmod +x /etc/init.d/aria2
        update-rc.d -f aria2 defaults
     fi
     echo -e "${Info} Aria2服務(wù) 管理腳本下載完成 !"
}
read_config(){
    status_type=$1
    if [[ ! -e ${aria2_conf} ]]; then
        if [[ ${status_type} != "un" ]]; then
            echo -e "${Error} Aria2 配置文件不存在 !" && exit 1
        fi
    else
        conf_text=$(cat ${aria2_conf}|grep -v '#')
        aria2_dir=$(echo -e "${conf_text}"|grep "dir="|awk -F "=" '{print $NF}')
        aria2_port=$(echo -e "${conf_text}"|grep "rpc-listen-port="|awk -F "=" '{print $NF}')
        aria2_passwd=$(echo -e "${conf_text}"|grep "rpc-secret="|awk -F "=" '{print $NF}')
    fi
    
}

#配置防火墻
add_iptables(){
    iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${aria2_RPC_port} -j ACCEPT
    iptables -I INPUT -m state --state NEW -m udp -p udp --dport ${aria2_RPC_port} -j ACCEPT
}
del_iptables(){
    iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport ${aria2_port} -j ACCEPT
    iptables -D INPUT -m state --state NEW -m udp -p udp --dport ${aria2_port} -j ACCEPT
}
save_iptables(){
    if [[ ${release} == "centos" ]]; then
        service iptables save
    else
        iptables-save > /etc/iptables.up.rules
    fi
}
set_iptables(){
    if [[ ${release} == "centos" ]]; then
        service iptables save
        chkconfig --level 2345 iptables on
    else
        iptables-save > /etc/iptables.up.rules
        echo -e '#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules' >/etc/network/if-pre-up.d/iptables
        chmod +x /etc/network/if-pre-up.d/iptables
    fi
}


#更新 bt_tracker 服務(wù)器
update_bt_tracker(){
    check_installed_status
    check_pid
    [[ ! -z ${PID} ]] && /etc/init.d/aria2 stop
    bt_tracker_list=$(wget -qO- https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_all.txt |awk NF|sed ":a;N;s/\n/,/g;ta")
    if [ -z "`grep "bt-tracker" ${aria2_conf}`" ]; then
        sed -i '$a bt-tracker='${bt_tracker_list} "${aria2_conf}"
        echo -e "${Info} 添加成功..."
    else
        sed -i "s@bt-tracker.*@bt-tracker=$bt_tracker_list@g" "${aria2_conf}"
        echo -e "${Info} 更新成功..."
    fi
    /etc/init.d/aria2 start
}

#安裝aria2
aria2_install(){
     check_root
     [[ -e ${aria2c} ]] && echo -e "${Error}當(dāng)前系統(tǒng)已經(jīng)安裝aria2了${Font}" && exit 1
     check_sys
     echo -e "${Info} 安裝依賴..."
     Installation_dependency
     echo -e "${Info} 安裝主程序..."
     get_newVer
     download_aria2
     echo -e "${Info} 下載配置文件..."
     download_aria2_conf
     echo -e "${Info} 安裝服務(wù)腳本..."
     service_aria2
     read_config
     aria2_RPC_port=${aria2_port}
     echo -e "${Info} 配置防火墻..."
     set_iptables
     add_iptables
     save_iptables
     echo -e "${Info} 設(shè)置自動更新 BT-Tracker服務(wù)器..."
     set_bt_tracker
}

#卸載aria2
uninstall_aria2(){
     check_installed_status "un"
     echo " 確定要卸載 aria2? (y/N)"
     echo
     read -e -p "(默認(rèn): n):" unyn
     [[ -z ${unyn} ]] && unyn="n"
     if [[ ${unyn} == [Yy] ]]; then
        check_pid
        [[ ! -z $PID ]] && kill -9 ${PID}
        read_config "un"
        del_iptables
        save_iptables
        cd "${Folder}"
        make uninstall
        cd ..
        rm -rf "${aria2c}"
        rm -rf "${Folder}"
        rm -rf "${file}"
        if [[ ${release} = "centos" ]]; then
            chkconfig --del aria2
        else
            update-rc.d -f aria2 remove
        fi
        rm -rf "/etc/init.d/aria2"
        echo && echo "aria2 卸載完成 !" && echo
     else
        echo && echo "卸載已取消..." && echo
     fi
}

#去除防火墻端口
del_iptables(){
    iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport ${aria2_port} -j ACCEPT
    iptables -D INPUT -m state --state NEW -m udp -p udp --dport ${aria2_port} -j ACCEPT
}

#檢測是否安裝
check_installed_status(){
     [[ ! -e ${aria2c} ]] && echo -e "${Error} aria2 沒有安裝,請檢查 !" && exit 1
     [[ ! -e ${aria2_conf} ]] && echo -e "${Error} aria2 配置文件不存在,請檢查 !" && [[ $1 != "un" ]] && exit 1
}

#檢測crontab
check_crontab_installed_status(){
    if [[ ! -e ${Crontab_file} ]]; then
        echo -e "${Error} Crontab 沒有安裝,開始安裝..."
        if [[ ${release} == "centos" ]]; then
            yum install crond -y
        else
            apt-get install cron -y
        fi
        if [[ ! -e ${Crontab_file} ]]; then
            echo -e "${Error} Crontab 安裝失敗,請檢查!" && exit 1
        else
            echo -e "${Info} Crontab 安裝成功!"
        fi
    fi
}

#檢測PID
check_pid(){
    PID=`ps -ef| grep "aria2c"| grep -v grep| grep -v "aria2.sh"| grep -v "init.d"| grep -v "service"| awk '{print $2}'`
}

#設(shè)置自動更新bt-tracker
set_bt_tracker(){
     check_crontab_installed_status
     crontab_update_start
}

crontab_update_start(){
    crontab -l > "$file_1/crontab.bak"
    sed -i "/aria2.sh update-bt-tracker/d" "$file_1/crontab.bak"
    echo -e "\n0 3 * * 1 /bin/bash $file_1/aria2.sh update-bt-tracker" >> "$file_1/crontab.bak"
    crontab "$file_1/crontab.bak"
    rm -f "$file_1/crontab.bak"
    cron_config=$(crontab -l | grep "aria2.sh update-bt-tracker")
    if [[ -z ${cron_config} ]]; then
        echo -e "${Error} Aria2 自動更新 BT-Tracker服務(wù)器 開啟失敗 !" 
        start_aria2
    else
        echo -e "${Info} Aria2 自動更新 BT-Tracker服務(wù)器 開啟成功 !"
        Update_bt_tracker_cron
    fi
}

Update_bt_tracker_cron(){
    check_installed_status
    check_pid
    [[ ! -z ${PID} ]] && /etc/init.d/aria2 stop
    bt_tracker_list=$(wget -qO- https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_all.txt |awk NF|sed ":a;N;s/\n/,/g;ta")
    if [ -z "`grep "bt-tracker" ${aria2_conf}`" ]; then
        sed -i '$a bt-tracker='${bt_tracker_list} "${aria2_conf}"
        echo -e "${Info} 添加成功..."
    else
        sed -i "s@bt-tracker.*@bt-tracker=$bt_tracker_list@g" "${aria2_conf}"
        echo -e "${Info} 更新成功..."
    fi
    /etc/init.d/aria2 start
}

#啟動
start_aria2(){
    check_installed_status
    check_pid
    [[ ! -z ${PID} ]] && echo -e "${Error} Aria2 正在運行,請檢查 !" && exit 1
    /etc/init.d/aria2 start
}

#停止
stop_aria2(){
    check_installed_status
    check_pid
    [[ -z ${PID} ]] && echo -e "${Error} Aria2 沒有運行,請檢查 !" && exit 1
    /etc/init.d/aria2 stop
}

#重啟
restart_aria2(){
    check_installed_status
    check_pid
    [[ ! -z ${PID} ]] && /etc/init.d/aria2 stop
    /etc/init.d/aria2 start
}

#安裝上傳腳本
install_autoUpload(){
     [[ -e ${auto_upload} ]] && echo -e "${Error} 自動上傳腳本已經(jīng)安裝,告辭!" && exit 1
     echo -e "${Info}下載安裝自動上傳腳本..."
     mkdir -p ${auto_upload}
     cd ${auto_upload}
     wget --no-check-certificate -q -O json-parser "https://raw.githubusercontent.com/0oVicero0/OneDrive/master/Business/json-parser"
     wget --no-check-certificate -q -O onedrive "https://raw.githubusercontent.com/0oVicero0/OneDrive/master/Business/onedrive"
     wget --no-check-certificate -q -O onedrive-d "https://raw.githubusercontent.com/0oVicero0/OneDrive/master/Business/onedrive-d"
     wget --no-check-certificate -q -O onedrive-authorize "https://67zz.cn/shell/onedrive-authorize"
     wget --no-check-certificate -q -O onedrive-base "https://raw.githubusercontent.com/0oVicero0/OneDrive/master/Business/onedrive-base"
     wget --no-check-certificate -q -O onedrive.cfg "https://67zz.cn/shell/onedrive.cfg"
     chmod -R a+x ${auto_upload}
     ln -sf ${auto_upload}/onedrive /usr/local/bin/
     ln -sf ${auto_upload}/onedrive-d /usr/local/bin/
     rm -rf $(basename "$0")
     wget -P ${file}  --no-check-certificate -N "https://67zz.cn/shell/autoUpload.sh"
     sed -i '$a on-download-complete=/root/.aria2/autoUpload.sh' "${aria2_conf}"
     chmod 777 ${file}/*
     restart_aria2
     echo -e "${Green_font}安裝完成,復(fù)制鏈接瀏覽器打開準(zhǔn)備授權(quán)!"
     onedrive -a #去授權(quán)
}

#卸載上傳腳本
uninstall_autoUpload(){
     [[ ! -e ${auto_upload} ]] && echo -e "${Error} 自動上傳腳本未安裝!" && exit 1
     rm -rf ${auto_upload}
     rm ${file}/autoUpload.sh
     restart_aria2
     echo -e "${Info} 上傳腳本卸載完成"
}

#重新認(rèn)證
goto_auth(){
     [[ ! -e ${auto_upload} ]] && echo -e "${Error} 自動上傳腳本未安裝,認(rèn)證個雞毛啊!" && exit 1
     onedrive -a #去認(rèn)證
}

action=$1
if [[ "${action}" == "update-bt-tracker" ]]; then
    Update_bt_tracker_cron
else echo && echo -e "
# ====================================================
#   ${Green_font} aria2+自動上傳OneDrive 一鍵腳本${Font}
#   ${Green_font} 站在巨人肩膀上(chaoxi)二次開發(fā) ${Font}
#   ${Green_font} 作者:Eleven ${Font}
#   ${Green_font} 網(wǎng)站:https://67zz.cn ${Font}
# ====================================================

 ${Green_font} 1.${Font} 安裝 aria2
 ${Green_font} 2.${Font} 卸載 aria2
 ${Green_font} 3.${Font} 重啟 aria2
 ${Green_font} 4.${Font} 停止 aria2
 ${Green_font} 5.${Font} 安裝 自動上傳腳本
 ${Green_font} 6.${Font} 卸載 自動上傳腳本
 ${Green_font} 7.${Font} 上傳腳本OneDrive 重新授權(quán)
"
read -e -p " 請輸入數(shù)字 [1-7]:" num

case "$num" in
    1)
     aria2_install  #安裝
    ;;
    2)
     uninstall_aria2  #卸載
    ;;
    3)
     restart_aria2   #重啟
    ;;
    4)
     stop_aria2 #停止
    ;;
    5)
     install_autoUpload #安裝上傳腳本
    ;;
    6)
     uninstall_autoUpload #卸載自動上傳腳本
    ;;
    7)
     goto_auth #安裝上傳腳本
    ;;
    *)
     echo "請輸入正確數(shù)字 [1-7]"
    ;;
esac
fi
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容