-
-
Save munfaqqiha/44ab04e9020bc8d887591fa88ce3355b 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 ######################### | |
####################################################################################################################################################### | |
### ----------------------------------------------------------------------------------------------------------------------------------------------- ### | |
### | sample of successful upload: on linux: https://s.id/teraupnix || on windows: https://s.id/teraupwin | ### | |
### ----------------------------------------------------------------------------------------------------------------------------------------------- ### | |
### 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" ### | |
### ### | |
####################################################################################################################################################### | |
### ALERT: ### | |
### .... After you've obtained your credentials, DO NOT press the "Sign Out" on the terabox.com when leaving it. It is enough to clear your cookies ### | |
### .... via the browser's built-in feature. If you do, then you'll not be able to upload files. You'll get an error something like: "need verify". ### | |
### ### | |
### NOTES: ### | |
### (*). 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. ### | |
### (*). don't forget to watch a sample of successful upload on linux & windows at here: https://cuty.io/teraput. ### | |
### (*). for the multiple lines bash command code get it at here: https://cuty.io/linuxwintera. ### | |
####################################################################################################################################################### | |
### THE CODE STARTS FROM HERE ######################################################################################################################### | |
{ ATTENTION } | |
There are two versions of the script currently available. The first version below is my latest work. Unfortunately, due to personal reasons, I decided not to maintain it anymore. No worries, it's still 100% working perfectly (December 23, 2024). | |
{ GOOD NEWS } | |
This script has been forked and maintained by a smart and humble user, @nis267. He also added simultaneous capabilities to this script. You can interact with him at: https://gist.github.com/nis267/74c6315f6dbd24a0b8889acdd08789e6. | |
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 "*piece[[:digit:]]*" ! -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 nfo=$(curl -sL "${bo}" -A "${ua}" -b "${co}" -e "${bo}/" | perl -pe 's/\%(\w\w)/chr hex $1/ge' | sed "s#\"#\\n#g;s|:||g;s|,||g" | awk 'NF') && jt=$(echo "$nfo" | grep -i 'jstok.*' -A1 | tail -1) && bt=$(echo "$nfo" | grep -i 'bdsto.*' -A1 | tail -1) && 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=0 "${yu}".piece && echo -e "$(ls -1 *piece[[:digit:]]* > 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) && ls -1 *part* >1 2>1 && pr=0 || pr=1 && ps=0 && while read mi; do ls -1 *piece[[:digit:]]* &>/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&jsToken=${jt}" -A "${ua}" -b "${co}" -e "${bo}/" | 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 *piece[[:digit:]]*; 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 #################################################################################################################################### |
Hello, nis267:
I'm very sorry for my delay in responding.
In the script you use some sleeps for what are they necessary? @munfaqqiha. I removed the sleeps in my changes.
It's just to see the output during the process.
I added the possibility to upload multiple files simultaneously here are the changes in my fork. It's much faster now for example to upload pictures I had 50.000 to uplaod.
I'm very happy to see you were able to add capabilities to the script.
And maybe create a repository in github so people can contribute and create pull requests?
Sure, I've activities in real life that I can't leave behind. So, I decided to give you a full freedom of access to improve, including to create a repository to organize the script. I trust your abilities. No worries, the entire script is free.
Maybe add it in your scipt? @munfaqqiha.
I haven't tried it, also I read in your fork that there's a user who are having problems with the script. So, you can fix it and do it as it should.
Good luck, and thanks a lot. Have a nice day.
I fixed the problems with the script and it's working now here are the changes in my fork
In the script you use some sleeps for what are they necessary? @munfaqqiha
I removed the sleeps in my changes.