Skip to content

Instantly share code, notes, and snippets.

@nl5887
Last active March 22, 2022 09:07
Star You must be signed in to star a gist
Save nl5887/a511f172d3fb3cd0e42d to your computer and use it in GitHub Desktop.
Bash and zsh alias for transfer.sh. Transfers files and directories to transfer.sh.
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
}
@PetrusKiendys
Copy link

Please consider pulling in my change:
https://gist.github.com/PetrusKiendys/a7775e674d2eb58d7f9a10e767befe0e/revisions?diff=unified

(currently no way to do a PR on gists.. :( )

@xendk
Copy link

xendk commented Jan 29, 2018

Consider replacing the fish version with a link to https://github.com/fisherman/transfer

@unhammer
Copy link

unhammer commented Feb 16, 2018

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.

@DennisLfromGA
Copy link

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

@qoomon
Copy link

qoomon commented Jun 24, 2018

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
}

@JackieMium
Copy link

JackieMium commented Aug 22, 2018

@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?

@tigefa4u
Copy link

tigefa4u commented Aug 27, 2018

not working on bash for me from alpine or ubuntu 18.04. why? 😕

@TheYkk
Copy link

TheYkk commented Jul 14, 2019

@JackieMium
add

print " " 

after last fi

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment