-
-
Save nl5887/a511f172d3fb3cd0e42d to your computer and use it in GitHub Desktop.
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 | |
} | |
Nice. However quotes are missing around $file (4 occurrences).
need to add a "-e" to echo for bash to interpret the newlines "\n".
Also looks like there's a redundant 'echo' in there?
Thank you so much for this service. You are beyond awesome. Wish I found out about it sooner!
Update: You can see my suggestions in my fork: https://gist.github.com/nl5887/a511f172d3fb3cd0e42d
I am using an older version of this alias. I tried to upload a file which its name contained brackets. I got an error because brackets have some special meaning for curl
, apparently. So I suggest calling curl
with -g
switch to make it treat brackets in filenames as normal characters.
Any idea why I get:
syntax error near unexpected token 'filename'
After adding the alias and trying to call it with any parameter?
why not add transfer $1
at the end so its self executing and one can just add the file somewhere on the PATH
?
Hello! How can one properly modify this shell script to add GPG encryption functionality ? It would be really nice to have this as an option.
$ transfer "Name With Spaces.txt"
result in
basename: extra operand 'Spaces.txt'
Try 'basename --help' for more information.
on the website's version, the gist works well ;D
Agreeing with @tallinn-code, it could be great to implement a .trshrc file ;D
There are several double quotes missing, plus other mistakes as in usage.
Here's the correct (bash) code:
transfer() {
# check arguments
if [ $# -ne 1 ];
then
echo -e "Wrong arguments specified. Usage:\ntransfer /tmp/test.md\ncat /tmp/test.md | transfer test.md"
return 1
fi
# get temporary filename, output is written to this file so 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"
echo
# 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? 😕
Is there a version of.Bat?