mirror of
https://github.com/alexanderepstein/Bash-Snippets
synced 2018-11-08 02:59:35 +01:00
Adding transfer
This commit is contained in:
parent
be69a63c89
commit
bbb1f8a728
173
transfer/transfer
Executable file
173
transfer/transfer
Executable file
@ -0,0 +1,173 @@
|
||||
#!/usr/bin/env bash
|
||||
# Author: Alexander Epstein https://github.com/alexanderepstein
|
||||
configuredDownloadClient=""
|
||||
configuredUploadClient=""
|
||||
configuredClient=""
|
||||
currentVersion="1.17.3"
|
||||
single="false"
|
||||
down="false"
|
||||
|
||||
## This function determines which http get tool the system has installed and returns an error if there isnt one
|
||||
getConfiguredDownloadClient()
|
||||
{
|
||||
if command -v curl &>/dev/null; then
|
||||
configuredDownloadClient="curl"
|
||||
elif command -v wget &>/dev/null; then
|
||||
configuredDownloadClient="wget"
|
||||
elif command -v fetch &>/dev/null; then
|
||||
configuredDownloadClient="fetch"
|
||||
else
|
||||
echo "Error: Downloading with this tool reqires either curl, wget, or fetch to be installed." >&2
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
## Allows to call the users configured client without if statements everywhere
|
||||
httpGet()
|
||||
{
|
||||
case "$configuredClient" in
|
||||
curl) curl -A curl -s "$@" ;;
|
||||
wget) wget -qO- "$@" ;;
|
||||
httpie) http -b GET "$@" ;;
|
||||
fetch) fetch -q "$@" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
## This function determines which http get tool the system has installed and returns an error if there isnt one
|
||||
getConfiguredClient()
|
||||
{
|
||||
if command -v curl &>/dev/null; then
|
||||
configuredClient="curl"
|
||||
elif command -v wget &>/dev/null; then
|
||||
configuredClient="wget"
|
||||
elif command -v http &>/dev/null; then
|
||||
configuredClient="httpie"
|
||||
elif command -v fetch &>/dev/null; then
|
||||
configuredClient="fetch"
|
||||
else
|
||||
echo "Error: This tool reqires either curl, wget, httpie or fetch to be installed." >&2
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
## This function determines which http get tool the system has installed and returns an error if there isnt one
|
||||
getconfiguredUploadClient()
|
||||
{
|
||||
if command -v curl &>/dev/null; then
|
||||
configuredUploadClient="curl"
|
||||
elif command -v wget &>/dev/null; then
|
||||
configuredUploadClient="wget"
|
||||
else
|
||||
echo "Error: Uploading with this tool reqires either curl or wget to be installed." >&2
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
## Allows to call the users configured client without if statements everywhere
|
||||
httpDownload()
|
||||
{
|
||||
|
||||
case "$configuredDownloadClient" in
|
||||
curl) curl -A curl --progress -o "$tempOutputPath/$3" "https://transfer.sh/$2/$3" || { echo "Failure!"; return 1;};;
|
||||
wget) wget --progress=dot -O "$tempOutputPath/$3" "https://transfer.sh/$2/$3" || { echo "Failure!"; return 1;} ;;
|
||||
fetch) fetch -q -o "$tempOutputPath/$3" "https://transfer.sh/$2/$3" || { echo "Failure!"; return 1;};;
|
||||
esac
|
||||
}
|
||||
|
||||
checkInternet()
|
||||
{
|
||||
httpGet github.com > /dev/null 2>&1 || { echo "Error: no active internet connection" >&2; return 1; } # query github with a get request
|
||||
}
|
||||
|
||||
singleDownload()
|
||||
{
|
||||
if [[ ! -d $1 && $1 != "" ]];then { echo "Error: invalid output directory"; exit 1;};fi
|
||||
if [[ $1 == "" ]];then tempOutputPath=$(pwd)
|
||||
else tempOutputPath=$1;fi
|
||||
if [ -f "$tempOutputPath/$3" ];then
|
||||
echo -n "File aleady exists at $tempOutputPath/$3, do you want to delete it? [Y/n] "
|
||||
read -r answer
|
||||
if [[ "$answer" == [Yy] ]] ;then
|
||||
rm -f $tempOutputPath/$3
|
||||
else
|
||||
echo "Stopping download"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
echo "Downloading $3"
|
||||
httpDownload "$tempOutputPath" "$2" "$3"
|
||||
echo "Success!"
|
||||
}
|
||||
|
||||
httpSingleUpload()
|
||||
{
|
||||
case "$configuredUploadClient" in
|
||||
curl) response=$(curl -A curl --progress --upload-file "$1" "https://transfer.sh/$2") || { echo "Failure!"; return 1;};;
|
||||
wget) response=$(wget --progress=dot --method PUT --body-file="$1" "https://transfer.sh/$2") || { echo "Failure!"; return 1;} ;;
|
||||
esac
|
||||
echo -e "Success!\nFile uploaded to: $response"
|
||||
}
|
||||
|
||||
|
||||
singleUpload()
|
||||
{
|
||||
filePath=$(echo $1 | sed s:"~":$HOME:g)
|
||||
if [ ! -f $filePath ];then { echo "Error: invalid file path"; return 1;}; fi
|
||||
tempFileName=$(echo $1 | sed "s/.*\///")
|
||||
tempFilePath=$(echo $1 | sed s:"~":$HOME:g)
|
||||
echo "Uploading $tempFileName"
|
||||
httpSingleUpload "$tempFilePath" "$tempFileName"
|
||||
}
|
||||
|
||||
while getopts "s:d:uvh" opt; do
|
||||
case "$opt" in
|
||||
\?) echo "Invalid option: -$OPTARG" >&2
|
||||
exit 1
|
||||
;;
|
||||
h) usage
|
||||
exit 0
|
||||
;;
|
||||
v) echo "Version $currentVersion"
|
||||
exit 0
|
||||
;;
|
||||
u) update
|
||||
exit 0
|
||||
;;
|
||||
d) down="true"
|
||||
if [ $# -lt 4 ];then { echo "Error: not enough arguments for downloading a file, see the usage"; return 1;};fi
|
||||
inputFilePath=$(echo "$*" | sed s/-d//g | cut -d " " -f 2)
|
||||
inputID=$(echo "$*" | sed s/-d//g | cut -d " " -f 3)
|
||||
inputFileName=$(echo "$*" | sed s/-d//g | cut -d " " -f 4)
|
||||
;;
|
||||
s) single="true"
|
||||
inputFilePath=$(echo "$@" | sed s/-s//g)
|
||||
;;
|
||||
:) echo "Option -$OPTARG requires an argument." >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if $down && $single;then { echo "Error: upload and download are mutually exclusive";exit 1;};fi
|
||||
|
||||
if [[ $# == "0" ]]; then
|
||||
usage
|
||||
exit 0
|
||||
elif [[ $1 == "help" ]]; then
|
||||
usage
|
||||
exit 0
|
||||
elif [[ $1 == "update" ]]; then
|
||||
update
|
||||
exit 0
|
||||
elif $single ;then
|
||||
getConfiguredClient || exit 1
|
||||
checkInternet || exit 1
|
||||
getconfiguredUploadClient || exit 1
|
||||
singleUpload "$inputFilePath" || exit 1
|
||||
exit 0
|
||||
elif $down;then
|
||||
getConfiguredClient || exit 1
|
||||
checkInternet || exit 1
|
||||
getConfiguredDownloadClient || exit 1
|
||||
singleDownload "$inputFilePath" "$inputID" "$inputFileName" || exit 1
|
||||
exit 0
|
||||
fi
|
Loading…
Reference in New Issue
Block a user