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 | |
} | |
$ 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?
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.