This repository has been archived on 2023-08-27. You can view files and clone it, but cannot push or open issues or pull requests.
transfer.sh/examples.md
Thorsten Schubert 5e7a90bb3e No timestamp and prefix when using journald
* Style and formatting cleanup

* Bash transfer script and systemd unit file

* Point docs to new url
2022-06-29 14:12:27 +00:00

6.4 KiB

Table of Contents

Aliases

Add alias to .bashrc or .zshrc

Using curl

transfer() {
    curl --progress-bar --upload-file "$1" https://file.unsha.re/$(basename "$1") | tee /dev/null;
    echo
}

alias transfer=transfer

Using wget

transfer() {
    wget -t 1 -qO - --method=PUT --body-file="$1" --header="Content-Type: $(file -b --mime-type "$1")" https://file.unsha.re/$(basename "$1");
    echo
}

alias transfer=transfer

Add alias for fish-shell

Using curl

function transfer --description 'Upload a file to transfer.sh'
    if [ $argv[1] ]
        # write to output to tmpfile because of progress bar
        set -l tmpfile ( mktemp -t transferXXXXXX )
        curl --progress-bar --upload-file "$argv[1]" https://file.unsha.re/(basename $argv[1]) >> $tmpfile
        cat $tmpfile
        command rm -f $tmpfile
    else
        echo 'usage: transfer FILE_TO_TRANSFER'
    end
end

funcsave transfer

Using wget

function transfer --description 'Upload a file to transfer.sh'
    if [ $argv[1] ]
        wget -t 1 -qO - --method=PUT --body-file="$argv[1]" --header="Content-Type: (file -b --mime-type $argv[1])" https://file.unsha.re/(basename $argv[1])
    else
        echo 'usage: transfer FILE_TO_TRANSFER'
    end
end

funcsave transfer

Now run it like this:

$ transfer test.txt

Add alias on Windows

Put a file called transfer.cmd somewhere in your PATH with this inside it:

@echo off
setlocal
:: use env vars to pass names to PS, to avoid escaping issues
set FN=%~nx1
set FULL=%1
powershell -noprofile -command "$(Invoke-Webrequest -Method put -Infile $Env:FULL https://file.unsha.re/$Env:FN).Content"

Uploading and Downloading

Uploading with wget

$ wget --method PUT --body-file=/tmp/file.tar https://file.unsha.re/file.tar -O - -nv 

Uploading with PowerShell

PS H:\> invoke-webrequest -method put -infile .\file.txt https://file.unsha.re/file.txt 

Upload using HTTPie

$ http https://file.unsha.re/ -vv < /tmp/test.log 

Uploading a filtered text file

$ grep 'pound' /var/log/syslog | curl --upload-file - https://file.unsha.re/pound.log 

Downloading with curl

$ curl https://file.unsha.re/1lDau/test.txt -o test.txt

Downloading with wget

$ wget https://file.unsha.re/1lDau/test.txt

Archiving and backups

Backup, encrypt and transfer a MySQL dump

$ mysqldump --all-databases | gzip | gpg -ac -o- | curl -X PUT --upload-file "-" https://file.unsha.re/test.txt

Archive and upload directory

$ tar -czf - /var/log/journal | curl --upload-file - https://file.unsha.re/journal.tar.gz

Uploading multiple files at once

$ curl -i -F filedata=@/tmp/hello.txt -F filedata=@/tmp/hello2.txt https://file.unsha.re/

Combining downloads as zip or tar.gz archive

$ curl https://file.unsha.re/(15HKz/hello.txt,15HKz/hello.txt).tar.gz
$ curl https://file.unsha.re/(15HKz/hello.txt,15HKz/hello.txt).zip 
$ transfer /tmp/hello.txt | mail -s "Hello World" user@yourmaildomain.com 

Encrypting and decrypting

Encrypting files with password using gpg

$ cat /tmp/hello.txt | gpg -ac -o- | curl -X PUT --upload-file "-" https://file.unsha.re/test.txt

Downloading and decrypting

$ curl https://file.unsha.re/1lDau/test.txt | gpg -o- > /tmp/hello.txt 

Import keys from keybase

$ keybase track [them] # Encrypt for recipient(s)
$ cat somebackupfile.tar.gz | keybase encrypt [them] | curl --upload-file '-' https://file.unsha.re/test.txt # Decrypt
$ curl https://file.unsha.re/sqUFi/test.md | keybase decrypt

Uploading and copy download command

Download commands can be automatically copied to the clipboard after files are uploaded using transfer.sh.

It was designed for Linux or macOS.

1. Install xclip or xsel for Linux, macOS skips this step

Install later, add pbcopy and pbpaste to .bashrc or .zshrc or its equivalent.

  • If use xclip, paste the following lines:
alias pbcopy='xclip -selection clipboard'
alias pbpaste='xclip -selection clipboard -o'
  • If use xsel, paste the following lines:
alias pbcopy='xsel --clipboard --input'
alias pbpaste='xsel --clipboard --output'

2. Add Uploading and copy download command shell function

  1. Open .bashrc or .zshrc or its equivalent.

  2. Add the following shell script:

    transfer() {
      curl --progress-bar --upload-file "$1" https://file.unsha.re/$(basename "$1") | pbcopy;
      echo "1) Download link:"
      echo "$(pbpaste)"
    
      echo "\n2) Linux or macOS download command:"
      linux_macos_download_command="wget $(pbpaste)"
      echo $linux_macos_download_command
    
      echo "\n3) Windows download command:"
      windows_download_command="Invoke-WebRequest -Uri "$(pbpaste)" -OutFile $(basename $1)"
      echo $windows_download_command
    
      case $2 in
        l|m)  echo $linux_macos_download_command | pbcopy
        ;;
        w)  echo $windows_download_command | pbcopy
        ;;
      esac
    }
    

3. Test

The transfer command has two parameters:

  1. The first parameter is the path to upload the file.

  2. The second parameter indicates which system's download command is copied. optional:

    • This parameter is empty to copy the download link.

    • l or m copy the Linux or macOS command that downloaded the file.

    • w copy the Windows command that downloaded the file.

For example, The command to download the file on Windows will be copied:

$ transfer ~/temp/a.log w
######################################################################## 100.0%
1) Download link:
https://file.unsha.re/y0qr2c/a.log

2) Linux or macOS download command:
wget https://file.unsha.re/y0qr2c/a.log

3) Windows download command:
Invoke-WebRequest -Uri https://file.unsha.re/y0qr2c/a.log -OutFile a.log