add transfer support for zsh
This commit is contained in:
parent
3497f21bf0
commit
8292c7528f
1 changed files with 111 additions and 0 deletions
|
@ -98,6 +98,117 @@ function fixvmware() {
|
|||
virsh --connect qemu:///system net-start --network default
|
||||
}
|
||||
|
||||
transfer()
|
||||
{
|
||||
local file
|
||||
declare -a file_array
|
||||
file_array=("${@}")
|
||||
|
||||
if [[ "${file_array[@]}" == "" || "${1}" == "--help" || "${1}" == "-h" ]]
|
||||
then
|
||||
echo "${0} - Upload arbitrary files to \"transfer.brothertec.eu\"."
|
||||
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.brothertec.eu\":"
|
||||
echo " curl --request GET \"https://transfer.brothertec.eu\""
|
||||
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
|
||||
|
||||
du -c -k -L "${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.brothertec.eu"? (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.brothertec.eu"? (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
|
||||
# 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.brothertec.eu/")
|
||||
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
|
||||
}
|
||||
|
||||
## colored prompt
|
||||
autoload -U colors && colors
|
||||
PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%/ %{$reset_color%}% "
|
||||
|
|
Loading…
Reference in a new issue