mirror of
https://github.com/dutchcoders/transfer.sh.git
synced 2024-11-27 06:30:19 +01:00
Example Zsh/Bash function for transfer.sh homepage (#478)
* correct typo * adapt title * update function, correct typo, adapt sample output * adapt subheading * improve readability, reuse variables, save delete token as separate variable * improve readability * put function into expandable detail section Co-authored-by: Stefan Benten <mail@stefan-benten.de>
This commit is contained in:
parent
eeff2c88be
commit
f06aef1c3e
1 changed files with 144 additions and 13 deletions
157
README.md
157
README.md
|
@ -237,26 +237,157 @@ $ transfer hello.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### Zsh (with delete url outpu)
|
### Bash and zsh (with delete url, delete token output and prompt before uploading)
|
||||||
##### Add this to .zshrc or its equivalent
|
##### Add this to .bashrc or .zshrc or its equivalent
|
||||||
|
|
||||||
|
<details><summary>Expand</summary><p>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
transfer()
|
transfer()
|
||||||
{
|
{
|
||||||
local file="${1}"
|
local file
|
||||||
local filename="${file##*/}"
|
declare -a file_array
|
||||||
# show delete link from the response header after upload. the command "sed" is necessary to clean up the output, "gsub()" in "awk" does not work.
|
file_array=("${@}")
|
||||||
curl --request PUT --progress-bar --dump-header - --upload-file "${file}" "https://transfer.sh/${filename}" | sed "s/#//g" | awk '/x-url-delete/ { print "Delete command: curl --request DELETE " $2 } END{ print "Download link: " $1 }'
|
|
||||||
|
if [[ "${file_array[@]}" == "" || "${1}" == "--help" || "${1}" == "-h" ]]
|
||||||
|
then
|
||||||
|
echo "${0} - Upload arbitrary files to \"transfer.sh\"."
|
||||||
|
echo ""
|
||||||
|
echo "Usage: ${0} [options] [<file>]..."
|
||||||
|
echo ""
|
||||||
|
echo "OPTIONS:"
|
||||||
|
echo " -h, --help"
|
||||||
|
echo " show this message"
|
||||||
|
echo ""
|
||||||
|
echo "EXAMPLES:"
|
||||||
|
echo " Upload a single file from the current working directory:"
|
||||||
|
echo " ${0} \"image.img\""
|
||||||
|
echo ""
|
||||||
|
echo " Upload multiple files from the current working directory:"
|
||||||
|
echo " ${0} \"image.img\" \"image2.img\""
|
||||||
|
echo ""
|
||||||
|
echo " Upload a file from a different directory:"
|
||||||
|
echo " ${0} \"/tmp/some_file\""
|
||||||
|
echo ""
|
||||||
|
echo " Upload all files from the current working directory. Be aware of the webserver's rate limiting!:"
|
||||||
|
echo " ${0} *"
|
||||||
|
echo ""
|
||||||
|
echo " Upload a single file from the current working directory and filter out the delete token and download link:"
|
||||||
|
echo " ${0} \"image.img\" | awk --field-separator=\": \" '/Delete token:/ { print \$2 } /Download link:/ { print \$2 }'"
|
||||||
|
echo ""
|
||||||
|
echo " Show help text from \"transfer.sh\":"
|
||||||
|
echo " curl --request GET \"https://transfer.sh\""
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
for file in "${file_array[@]}"
|
||||||
|
do
|
||||||
|
if [[ ! -f "${file}" ]]
|
||||||
|
then
|
||||||
|
echo -e "\e[01;31m'${file}' could not be found or is not a file.\e[0m" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
unset file
|
||||||
|
fi
|
||||||
|
|
||||||
|
local upload_files
|
||||||
|
local curl_output
|
||||||
|
local awk_output
|
||||||
|
local filename
|
||||||
|
|
||||||
|
du --total --block-size="K" --dereference "${file_array[@]}" >&2
|
||||||
|
# be compatible with "bash"
|
||||||
|
if [[ "${ZSH_NAME}" == "zsh" ]]
|
||||||
|
then
|
||||||
|
read $'upload_files?\e[01;31mDo you really want to upload the above files ('"${#file_array[@]}"$') to "transfer.sh"? (Y/n): \e[0m'
|
||||||
|
elif [[ "${BASH}" == *"bash"* ]]
|
||||||
|
then
|
||||||
|
read -p $'\e[01;31mDo you really want to upload the above files ('"${#file_array[@]}"$') to "transfer.sh"? (Y/n): \e[0m' upload_files
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "${upload_files:-y}" in
|
||||||
|
"y"|"Y")
|
||||||
|
# for the sake of the progress bar, execute "curl" for each file.
|
||||||
|
# the parameters "--include" and "--form" will suppress the progress bar.
|
||||||
|
for file in "${file_array[@]}"
|
||||||
|
do
|
||||||
|
filename="${file##*/}"
|
||||||
|
# show delete link and filter out the delete token from the response header after upload.
|
||||||
|
# it is important to save "curl's" "stdout" via a subshell to a variable or redirect it to another command,
|
||||||
|
# which just redirects to "stdout" in order to have a sane output afterwards.
|
||||||
|
# the progress bar is redirected to "stderr" and is only displayed,
|
||||||
|
# if "stdout" is redirected to something; e.g. ">/dev/null", "tee /dev/null" or "| <some_command>".
|
||||||
|
# the response header is redirected to "stdout", so redirecting "stdout" to "/dev/null" does not make any sense.
|
||||||
|
# redirecting "curl's" "stderr" to "stdout" ("2>&1") will suppress the progress bar.
|
||||||
|
curl_output=$(curl --request PUT --progress-bar --dump-header - --upload-file "${file}" "https://transfer.sh/${filename}")
|
||||||
|
awk_output=$(awk \
|
||||||
|
'gsub("\r", "", $0) && tolower($1) ~ /x-url-delete/ \
|
||||||
|
{
|
||||||
|
delete_link=$2;
|
||||||
|
print "Delete command: curl --request DELETE " "\""delete_link"\"";
|
||||||
|
|
||||||
|
gsub(".*/", "", delete_link);
|
||||||
|
delete_token=delete_link;
|
||||||
|
print "Delete token: " delete_token;
|
||||||
|
}
|
||||||
|
|
||||||
|
END{
|
||||||
|
print "Download link: " $0;
|
||||||
|
}' <<< "${curl_output}")
|
||||||
|
|
||||||
|
# return the results via "stdout", "awk" does not do this for some reason.
|
||||||
|
echo -e "${awk_output}\n"
|
||||||
|
|
||||||
|
# avoid rate limiting as much as possible; nginx: too many requests.
|
||||||
|
if (( ${#file_array[@]} > 4 ))
|
||||||
|
then
|
||||||
|
sleep 5
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
|
||||||
|
"n"|"N")
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo -e "\e[01;31mWrong input: '${upload_files}'.\e[0m" >&2
|
||||||
|
return 1
|
||||||
|
esac
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Sample ouput
|
</p></details>
|
||||||
```bash
|
|
||||||
$ transfer image.img
|
|
||||||
######################################################################################################################################################################################################################################## 100.0%
|
|
||||||
Delete command: curl --request DELETE https://transfer.sh/Ge9cuW/image.img/<some_delete_token>
|
|
||||||
Download link: https://transfer.sh/Ge9cuW/image.img
|
|
||||||
```
|
|
||||||
|
|
||||||
|
#### Sample output
|
||||||
|
```bash
|
||||||
|
$ ls -lh
|
||||||
|
total 20M
|
||||||
|
-rw-r--r-- 1 <some_username> <some_username> 10M Apr 4 21:08 image.img
|
||||||
|
-rw-r--r-- 1 <some_username> <some_username> 10M Apr 4 21:08 image2.img
|
||||||
|
$ transfer image*
|
||||||
|
10240K image2.img
|
||||||
|
10240K image.img
|
||||||
|
20480K total
|
||||||
|
Do you really want to upload the above files (2) to "transfer.sh"? (Y/n):
|
||||||
|
######################################################################################################################################################################################################################################## 100.0%
|
||||||
|
Delete command: curl --request DELETE "https://transfer.sh/wJw9pz/image2.img/mSctGx7pYCId"
|
||||||
|
Delete token: mSctGx7pYCId
|
||||||
|
Download link: https://transfer.sh/wJw9pz/image2.img
|
||||||
|
|
||||||
|
######################################################################################################################################################################################################################################## 100.0%
|
||||||
|
Delete command: curl --request DELETE "https://transfer.sh/ljJc5I/image.img/nw7qaoiKUwCU"
|
||||||
|
Delete token: nw7qaoiKUwCU
|
||||||
|
Download link: https://transfer.sh/ljJc5I/image.img
|
||||||
|
|
||||||
|
$ transfer "image.img" | awk --field-separator=": " '/Delete token:/ { print $2 } /Download link:/ { print $2 }'
|
||||||
|
10240K image.img
|
||||||
|
10240K total
|
||||||
|
Do you really want to upload the above files (1) to "transfer.sh"? (Y/n):
|
||||||
|
######################################################################################################################################################################################################################################## 100.0%
|
||||||
|
tauN5dE3fWJe
|
||||||
|
https://transfer.sh/MYkuqn/image.img
|
||||||
|
```
|
||||||
|
|
||||||
## Contributions
|
## Contributions
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue