Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save solomonskey/3b80571b597b1df375dd1c306c8a28b2 to your computer and use it in GitHub Desktop.
Save solomonskey/3b80571b597b1df375dd1c306c8a28b2 to your computer and use it in GitHub Desktop.
### BY: MUNFAQQIHA ####################################################################################################################################
######################### A BASH SHELL SCRIPT FOR LINUX AND WINDOWS TO AUTOMATICALLY NON-STOP UPLOAD FILES TO WWW.TERABOX.COM #########################
#######################################################################################################################################################
### ----------------------------------------------------------------------------------------------------------------------------------------------- ###
### | a sample of successful upload on linux & windows: https://terabox.fun/sl/2ZTPZn8B78 | ###
### ----------------------------------------------------------------------------------------------------------------------------------------------- ###
### it is possible to upload multiple different types of files recursively, except 0-byte file size, in a folder where you run it. The maximum size ###
### of a single uploaded file allowed by terabox is 2147483648 Bytes (2.00 GiB). if a file exceeds that, this script will split it into pieces, and ###
### 120MiB is the upper limit of a single segment size allowed for multipart upload. however, terabox limits the maximum size of a single file that ###
### can be stored on their server. the total size of a single file for premium user is limited to 21474836479 Bytes (20.00 GiB), & 4294967296 Bytes ###
### (4.00 GiB) for a free member - https://s.id/1IMx2. ###
### ----------------------------------------------------------------------------------------------------------------------------------------------- ###
### ###
### catch the following steps to make it successful (run it on VPS / RDP for faster speed): ###
### ###
### 1. install jq: ###
### ###
### a. on linux do as usual. ###
### b. on windows: choose one of the following: ###
### (1). install linux with WSL: ubuntu or debian (highly recommended). ###
### (2). install gitforwindows (gitforwindows.org). ###
### (*). choose all of its default options. ###
### (*). run this on its shell: curl -Lo /usr/bin/jq.exe https://github.com/stedolan/jq/releases/latest/download/jq-win64.exe && jq -V ###
### ###
### 2. set the value for each of the following variables: ###
### ###
### it is all those little steps to get the value of the following 3 variables jt (jsToken), bt (bdstoken), and co (cookie): ###
### ###
### a. login to terabox account via chrome on desktop. ###
### b. press CTRL + R, then F12, next type "getinfo" in the "Filter" column ###
### c. so click "Networks" tab, right-click the url that says "getinfo" ###
### d. select copy >> Copy as cURL (bash), and don't event miss to paste it into your text editor. its usage is below: ###
### ###
### (1). for "jt" value, copy from "jsToken" section after "=" sign and before "&". ###
### (2). for "bt" value, copy from "bdstoken" section after as "jt" above. ###
### (3). for "co" value, copy from "cookie" section as usually. ###
### ###
### jt="" ###
### bt="" ###
### co="" ###
### ###
### e. the next let you go to fill out all variables (pay attention to text case): ###
### ###
### (1). full location path of a folder containing the files to be uploaded to terabox. ###
### ###
### # sample output of pwd command on linux shell. ###
### fl="/home/munfaqqiha/Pilem/Jadul" ###
### ###
### # sample output of pwd command on gitforwindows shell. ###
### fl="/c/Pilem/Jadul" ###
### ###
### (2). full path of your terabox folder where you'd like to store your files. ###
### ###
### rf="/Pilem/Jadul" ###
### ###
### (3). do you wanna move your files to another place after they're uploaded?: <yes/no>. ###
### ###
### mv="no" ###
### ###
### (4). if you decide that, please specify a full path of a backup folder to move them. ###
### ###
### # sample output of pwd command on linux shell. ###
### bu="/home/munfaqqiha/Pilem/Backup" ###
### ###
### # sample output of pwd command on gitforwindows shell. ###
### bu="/c/Pilem/Backup" ###
### ###
### (5). would you like to get a shared & download link of each uploaded file?: <yes/no>. all will be saved into a text file named "link.id". ###
### ###
### ds="yes" ###
### ###
### (6). while you'd agree to the points above, set its expiration date either 7, 30 (days), or 0 (forever). ###
### ###
### on="0" ###
### ###
### (7). please decide whether files may be deleted from the folder after they're uploaded: <yes/no>. ###
### ###
### rm="no" ###
### ###
#######################################################################################################################################################
### NOTICE: ###
### (*). it is also possible to run the code with the command: "bash yours.sh". if you picking on this, please include all variables in your file. ###
### (*). you'll not be able to upload files if you click "logout" when ending a session in terabox.com. it's enough to clear sessions via browser. ###
### (*). don't forget to watch a sample of successful upload on linux & windows at here: https://terabox.fun/sl/2ZTPZn8B78. ###
### (*). for the multiple lines bash command code get it at here: https://terabox.fun/sl/2malAfJueA. ###
#######################################################################################################################################################
### THE CODE STARTS FROM HERE #########################################################################################################################
set +H
jt="your stuffing"
bt="............."
co="............."
fl="............."
rf="............."
mv="............."
bu="............."
ds="............."
on="............."
rm="............."
[[ -n ${fl} && -d ${fl} ]] && cd "${fl}" && ua='okhttp/7.4' && bo='https://www.terabox.com' && set +H && find . -name "*piece0*" ! -regex ".*\.\(sh\|id\)" -delete && echo -e "\n$(ls 2>&- --color -Ss1pq --block-size=1 "${PWD}/"*)" && readarray -t mi <<<"$(find . -type f ! -regex ".*\.\(sh\|id\)" -size +0 -printf "%f\n")" && vi=$(curl -s "${bo}/rest/2.0/membership/proxy/user?method=query" -A "${ua}" -b "${co}" -e "${bo}/" | jq -r '.data.member_info.is_vip') && for yu in "${mi[@]}"; do sz=$(du -b "${yu}" 2>&- | awk '{print $1}') && fn=${yu} && qt=$(curl -s "${bo}/api/quota?checkexpire=1&checkfree=1&app_id=250528&jsToken=${jt}" -A "${ua}" -b "${co}" -e "${bo}/") && to=$(echo "$qt" | jq -r '.total') && us=$(echo "$qt" | jq -r '.used') && if [[ ! ( $(grep -s '[[:digit:]]' <<<${to}) ) || ! ( $(grep -s '[[:digit:]]' <<<${on}) ) || ( -z ${rf} || -z ${mv} || -z ${bu} || -z ${ds} || -z ${on} || -z ${rm} ) ]]; then echo -e "\n$(echo "# recheck: the value of your variables, and don't forget to paste all on the shell." | sed 's/# re.*ck:/\o033[1;41m&\o033[0m/I')" && break; elif [[ $((to - us)) -lt ${sz} ]]; then echo -e "\n$(echo "# quota: is smaller than the size of current file ($(numfmt --to=iec-i --suffix=B --format='%.2f' ${sz} | sed 's/[0-9]\+/& /2')). your remaining space is $(numfmt --to=iec-i --suffix=B --format='%.2f' $((to - us)) | sed 's/[0-9]\+/& /2')." | sed 's/# quota:/\o033[1;41m&\o033[0m/I')" && break; elif [[ -z "${sz/[ ]*\n/}" ]]; then echo -e "\n$(echo '# notice: please double check whether your file exists or not!.' | sed 's/# notice:/\o033[1;41m&\o033[0m/I')" && break; else echo -e "\n$(echo '### TERABOX: preparing..! ||' "$(echo "QUOTA:" $(numfmt --to=iec-i --suffix=B --format='%.2f' "$us" | sed 's/[0-9]\+/& /2') / $(numfmt --to=iec-i --suffix=B --format='%.2f' "$to" | sed 's/[0-9]\+/& /2'))" $(printf "%$(tput cols)s" | tr " " "#") | cut -c -$COLUMNS | sed -E 's/t.*x:|q.*:/\o033[1;41m&\o033[0m/Ig')\n" && if [[ ( ${vi} -eq 1 && ${sz} -le 21474836479 ) || ( ${vi} -eq 0 && ${sz} -le 4294967296 ) ]]; then [[ ${sz} -ge 2147483648 ]] && echo -e "$(echo "# info: your file is larger than 2147483648 bytes (2.00 GiB). please wait it will be splitted into pieces!." | sed 's/# info:/\o033[1;41m&\o033[0m/I')\n" && sleep 3 && (split --verbose -b 120M "${yu}" --suffix-length=3 --numeric-suffixes=1 "${yu}".piece && echo -e "$(ls -1 *piece0[0-9]* > piece0a)") || echo "${yu}" > piece0a; else echo -e "$(echo "# info: size limit exceeded!. the total size of a single file for vip user is limited to 21474836479 bytes, and 4294967296 bytes for a non." | sed 's/# info:/\o033[1;41m&\o033[0m/I')\n" && break; fi && cat piece0a | while read md; do md5sum <<<"${md}" | md5sum | cut -d ' ' -f1 >> piece0b; done && md5=$(cat piece0b | sed -n 's/^/"/;s/$/"/;H;${x;s/\n/,/g;s/^,//;p}' | awk '{print "["$0"]"}') && fp=$(echo "${rf}/${yu}" | jq -Rr @uri) && tp=$(echo "${rf}/" | sed 's#/*$##;${s|$|/|}') && pc=$(curl -s "${bo}/api/precreate?app_id=250528&jsToken=${jt}" -A "${ua}" -b "${co}" -H "Origin: ${bo}" -e "${bo}/" --data-raw "path=${fp}&size=${sz}&autoinit=1&rtype=3&target_path=${tp}&block_list=${md5}") && echo "$pc" | jq -C --arg fs "$(numfmt --to=iec-i --suffix=B --format='%.2f' <<<${sz} | sed 's/[0-9]\+/& /2') (${sz} Bytes)" '.filesize = $fs | .block_list |= tostring' 2>&- || true && sleep 3 && if grep -Eiq 'uploadid.*' <<<${pc}; then echo -e "\n$(echo '### TERABOX: uploading..!' $(printf "%$(tput cols)s" | tr " " "#") | cut -c -$COLUMNS | sed "s,t.*:,\o033[1;41m&\o033[0m,I")" && ui=$(echo $pc | jq -r '.uploadid') && bl=$(cat piece0a | wc -l) && pr=1 && ps=0 && while read mi; do ls -1 *piece0[0-9]* &>/dev/null && echo -e "\n$(echo "# uploading: piece #${pr} of #${bl} left | file: ${mi} | md5: $(cat piece0b | head -1 && sed -i '1d' piece0b)" | sed -e 's/# up.*ng:/\o033[1;41m&\o033[0m/Ig' -Ee 's/piece\s|left|file:|md5:/\x1b[32m&\x1b[0m/Ig')\n" || echo -e "$(true)" && up=$(curl -iF "file=@${mi}" "$(echo $bo | sed 's/www/c-jp/')/rest/2.0/pcs/superfile2?method=upload&type=tmpfile&app_id=250528&path=${fp}&uploadid=${ui}&partseq=${ps}" -A "${ua}" -b "${co}" -H "Origin: ${bo}" -e "${bo}/") && echo -e "\n$(echo "${up}" | tail -1 | jq -C 2>&-)" && echo "${up}" | sed '$!d' | jq -r '.md5' >> piece0c && ((bl--)) && pr=$((pr+1)) && ps=$(expr $ps + 1); done < piece0a && md5=$(cat piece0c | sed -n 's/^/"/;s/$/"/;H;${x;s/\n/,/g;s/^,//;p}' | awk '{print "["$0"]"}') && if grep -Eiq 'md5.*' <<<${up}; then echo -e "\n$(echo '### TERABOX: finishing..!' $(printf "%$(tput cols)s" | tr " " "#") | cut -c -$COLUMNS | sed "s,t.*:,\o033[1;41m&\o033[0m,I")\n" && if [[ ${mv} == *"yes"* ]]; then mkdir -p ${bu} && mv -f ${yu} ${bu}; elif [[ ${rm} == *"yes"* ]]; then rm -rf ${yu}; fi && create=$(curl -s "${bo}/api/create?isdir=0&rtype=1&bdstoken=${bt}&app_id=250528&jsToken=${jt}" -A "${ua}" -b "${co}" -H "Origin: ${bo}" -e "${bo}/" --data-raw "path=${fp}&size=${sz}&uploadid=${ui}&target_path=${tp}&block_list=${md5}") && fi=$(echo -e "$(echo ${create} | jq --arg fs "$(numfmt --to=iec-i --suffix=B --format='%.2f' <<<${sz} | sed 's/[0-9]\+/& /2') (${sz} Bytes)" '.size = $fs | {"uploaded": "Glory to God for His great work!"} + .')") && grep -Eiq 'yes' <<<${ds} && pl=$(echo ${create} | jq '.path' | jq -Rr @uri) && pl=$(echo $pl | sed -n 'H;${x;s/\n/,/g;s/^,//;p}' | awk '{print "["$0"]"}') && sl=$(curl -s "${bo}/share/pset?app_id=250528&bdstoken=${bt}" -A "${ua}" -b "${co}" -e "${bo}/" --data-raw "schannel=0&channel_list=[0]&period=${on}&path_list=${pl}&public=1" | jq -r '.link') && ma=$(echo $sl | awk -F 's/1' '{print $2}') && dl=$(curl -s "${bo}/share/list?shorturl=${ma}&root=1&app_id=250528" -A "${ua}" -H "Cookie: ${co}" | jq -r '.list[].dlink') && echo "$fi" | jq -C '.sharedlink="'"${sl}"'" | .downloadlink="'"${dl}"'"' && echo -e "Storedname: ${yu}\nSharedlink: ${sl}\nD/loadlink: ${dl}\n" >> link.id || echo "$fi" | jq -C && sleep 3 && rm -rf *piece0*; else echo -e "\n$(echo '# notice: look at the uploading log above..!' $(echo "${up}" | grep -oi 'http.*' | head -1 | sed 's/\s$//') | sed -e 's/# notice:/\o033[1;41m&\o033[0m/I' -e 's/http.*/\x1b[91m&\x1b[0m/Ig')"; fi; else echo -e "\n$(echo '# notice: please, look at the precreate section..!' | sed 's/# notice:/\o033[1;41m&\o033[0m/I')\n"; fi; fi; done && echo -e "\n$(ls 2>&- --color -Ss1pq --block-size=1 *)" || echo -e "\n$(echo "# notice: check the variable values of your file source directory and its exist or not!." | sed 's/# notice:/\o033[1;41m&\o033[0m/I')\n"
### CODE ENDS HERE ####################################################################################################################################
@fjk8
Copy link

fjk8 commented May 21, 2024

Not working, "# recheck: the value of your variables, and don't forget to paste all on the shell." error.
I'm not sure what to set as cookie, not clear in instruction, i tried all: csrfToken, browserid, ndus and ndut_fmt

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment