使用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"; #默認3線程靶累,自行修改,服務器配置不好的話稠腊,不建議太多
Block="20"; #默認分塊20m拧晕,自行修改
RemoteDIR=""; #上傳到Onedrive的路徑屈藐,默認為根目錄兄墅,如果要上傳到MOERATS目錄藻烤,""里面請?zhí)畛蒑OERATS
LocalDIR="/usr/local/Download/"; #Aria2下載目錄梗掰,記得最后面加上/
Uploader="/usr/local/bin/OneDriveUploader"; #上傳的程序完整路徑,默認為本文安裝的目錄
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權限
check_root(){
[[ $EUID != 0 ]] && echo -e "${Error} 當前非ROOT賬號,請切換ROOT在執(zhí)行當前腳本${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}
}
#下載服務腳本
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服務 管理腳本下載失敗 !" && 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服務 管理腳本下載失敗 !" && exit 1
fi
chmod +x /etc/init.d/aria2
update-rc.d -f aria2 defaults
fi
echo -e "${Info} Aria2服務 管理腳本下載完成 !"
}
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 服務器
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}當前系統(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} 安裝服務腳本..."
service_aria2
read_config
aria2_RPC_port=${aria2_port}
echo -e "${Info} 配置防火墻..."
set_iptables
add_iptables
save_iptables
echo -e "${Info} 設置自動更新 BT-Tracker服務器..."
set_bt_tracker
}
#卸載aria2
uninstall_aria2(){
check_installed_status "un"
echo " 確定要卸載 aria2? (y/N)"
echo
read -e -p "(默認: 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}'`
}
#設置自動更新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服務器 開啟失敗 !"
start_aria2
else
echo -e "${Info} Aria2 自動更新 BT-Tracker服務器 開啟成功 !"
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}安裝完成碧囊,復制鏈接瀏覽器打開準備授權!"
onedrive -a #去授權
}
#卸載上傳腳本
uninstall_autoUpload(){
[[ ! -e ${auto_upload} ]] && echo -e "${Error} 自動上傳腳本未安裝!" && exit 1
rm -rf ${auto_upload}
rm ${file}/autoUpload.sh
restart_aria2
echo -e "${Info} 上傳腳本卸載完成"
}
#重新認證
goto_auth(){
[[ ! -e ${auto_upload} ]] && echo -e "${Error} 自動上傳腳本未安裝,認證個雞毛啊!" && exit 1
onedrive -a #去認證
}
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 重新授權
"
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