function transfer | |
if test (count $argv) -eq 0 | |
echo "No arguments specified. Usage:\necho transfer /tmp/test.md\ncat /tmp/test.md | transfer test.md" | |
return 1 | |
end | |
## get temporarily filename, output is written to this file show progress can be showed | |
set tmpfile ( mktemp -t transferXXX ) | |
## upload stdin or file | |
set file $argv[1] | |
#if tty -s; | |
#then | |
set basefile (basename "$file" | sed -e 's/[^a-zA-Z0-9._-]/-/g') | |
# if [ ! -e $file ]; | |
# then | |
# echo "File $file doesn't exists." | |
# return 1 | |
# fi | |
if test -d $file | |
# zip directory and transfer | |
set zipfile ( mktemp -t transferXXX.zip ) | |
# echo (dirname $file) | |
#cd (dirname $file) and echo (pwd) | |
zip -r -q - $file >> $zipfile | |
curl --progress-bar --upload-file "$zipfile" "https://transfer.sh/$basefile.zip" >> $tmpfile | |
rm -f $zipfile | |
else | |
# transfer file | |
curl --progress-bar --upload-file "$file" "https://transfer.sh/$basefile" >> $tmpfile | |
end | |
#else | |
# # transfer pipe | |
# curl --progress-bar --upload-file "-" "https://transfer.sh/$file" >> $tmpfile | |
#fi | |
## cat output link | |
cat $tmpfile | |
## cleanup | |
rm -f $tmpfile | |
end |
# | |
# Defines transfer alias and provides easy command line file and folder sharing. | |
# | |
# Authors: | |
# Remco Verhoef <remco@dutchcoders.io> | |
# | |
curl --version 2>&1 > /dev/null | |
if [ $? -ne 0 ]; then | |
echo "Could not find curl." | |
return 1 | |
fi | |
transfer() { | |
# check arguments | |
if [ $# -eq 0 ]; | |
then | |
echo "No arguments specified. Usage:\necho transfer /tmp/test.md\ncat /tmp/test.md | transfer test.md" | |
return 1 | |
fi | |
# get temporarily filename, output is written to this file show progress can be showed | |
tmpfile=$( mktemp -t transferXXX ) | |
# upload stdin or file | |
file=$1 | |
if tty -s; | |
then | |
basefile=$(basename "$file" | sed -e 's/[^a-zA-Z0-9._-]/-/g') | |
if [ ! -e $file ]; | |
then | |
echo "File $file doesn't exists." | |
return 1 | |
fi | |
if [ -d $file ]; | |
then | |
# zip directory and transfer | |
zipfile=$( mktemp -t transferXXX.zip ) | |
cd $(dirname $file) && zip -r -q - $(basename $file) >> $zipfile | |
curl --progress-bar --upload-file "$zipfile" "https://transfer.sh/$basefile.zip" >> $tmpfile | |
rm -f $zipfile | |
else | |
# transfer file | |
curl --progress-bar --upload-file "$file" "https://transfer.sh/$basefile" >> $tmpfile | |
fi | |
else | |
# transfer pipe | |
curl --progress-bar --upload-file "-" "https://transfer.sh/$file" >> $tmpfile | |
fi | |
# cat output link | |
cat $tmpfile | |
# cleanup | |
rm -f $tmpfile | |
} | |
Thanks @HacKanCuBa ! Had the same problem.
Please consider pulling in my change:
https://gist.github.com/PetrusKiendys/a7775e674d2eb58d7f9a10e767befe0e/revisions?diff=unified
(currently no way to do a PR on gists.. :( )
Consider replacing the fish version with a link to https://github.com/fisherman/transfer
Yeah, this should be a real repo, for PR's.
Please, always use http://shellcheck.net/ on shell scripts.
You can get it immediately in vim on Ubuntu/Debian with sudo apt install shellcheck vim-syntastic
, also supported in lots of other editors, or just paste your script into the web site.
I added the following after '# cat output link' and before '# cleanup' to keep track of hem:
# log file link
APPLICATION="${0##*/}"
RIGHTNOW="$(date)"
EXPIRES="$(date -d "+14 days")"
echo -e "$(cat "$tmpfile") - uploaded $RIGHTNOW - expires $EXPIRES\n" >> ~/$APPLICATION.log
echo "See ~/$APPLICATION.log for all transfers."
~Denny
solution without temp files
transfer() {
# check arguments
if [ $# -eq 0 ]; then
echo "No arguments specified." >&2
echo "Usage:" >&2
echo " transfer <file|directory>" >&2
echo " ... | transfer <file_name>" >&2
return 1
fi
# upload stdin or file
if tty -s; then
file="$1"
if [ ! -e "$file" ]; then
echo "$file: No such file or directory" >&2
return 1
fi
file_name=$(basename "$file" | sed -e 's/[^a-zA-Z0-9._-]/-/g')
# upload file or directory
if [ -d "$file" ]; then
# transfer directory
file_name="$file_name.zip"
(cd "$file" && zip -r -q - .) | curl --progress-bar --upload-file "-" "https://transfer.sh/$file_name" | tee /dev/null
else
# transfer file
cat "$file" | curl --progress-bar --upload-file "-" "https://transfer.sh/$file_name" | tee /dev/null
fi
else
# transfer pipe
file_name=$1
curl --progress-bar --upload-file "-" "https://transfer.sh/$file_name" | tee /dev/null
fi
}
@qoomon
Both code from transfer.sh and your code return a link with a %
at the end, making the link fail to open when opened by just click the link in Terminal output. I have to manually remove the %
from address after pasted in address bar in a browser.
I am using zsh and add the function in ~/.zshrc
. What could be the reason?
not working on bash for me from alpine or ubuntu 18.04. why?
There are several double quotes missing, plus other mistakes as in usage.
Here's the correct (bash) code: