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

249 lines
6.4 KiB
Markdown

# Table of Contents
* [Aliases](#aliases)
* [Uploading and downloading](#uploading-and-downloading)
* [Archiving and backups](#archiving-and-backups)
* [Encrypting and decrypting](#encrypting-and-decrypting)
* [Uploading and copy download command](#uploading-and-copy-download-command)
## Aliases
<a name="aliases"/>
## Add alias to .bashrc or .zshrc
### Using curl
```bash
transfer() {
curl --progress-bar --upload-file "$1" https://file.unsha.re/$(basename "$1") | tee /dev/null;
echo
}
alias transfer=transfer
```
### Using wget
```bash
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
```fish
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
```fish
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:
```bash
$ transfer test.txt
```
## Add alias on Windows
Put a file called `transfer.cmd` somewhere in your PATH with this inside it:
```cmd
@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
<a name="uploading-and-downloading"/>
### Uploading with wget
```bash
$ wget --method PUT --body-file=/tmp/file.tar https://file.unsha.re/file.tar -O - -nv
```
### Uploading with PowerShell
```posh
PS H:\> invoke-webrequest -method put -infile .\file.txt https://file.unsha.re/file.txt
```
### Upload using HTTPie
```bash
$ http https://file.unsha.re/ -vv < /tmp/test.log
```
### Uploading a filtered text file
```bash
$ grep 'pound' /var/log/syslog | curl --upload-file - https://file.unsha.re/pound.log
```
### Downloading with curl
```bash
$ curl https://file.unsha.re/1lDau/test.txt -o test.txt
```
### Downloading with wget
```bash
$ wget https://file.unsha.re/1lDau/test.txt
```
## Archiving and backups
<a name="archiving-and-backups"/>
### Backup, encrypt and transfer a MySQL dump
```bash
$ mysqldump --all-databases | gzip | gpg -ac -o- | curl -X PUT --upload-file "-" https://file.unsha.re/test.txt
```
### Archive and upload directory
```bash
$ tar -czf - /var/log/journal | curl --upload-file - https://file.unsha.re/journal.tar.gz
```
### Uploading multiple files at once
```bash
$ curl -i -F filedata=@/tmp/hello.txt -F filedata=@/tmp/hello2.txt https://file.unsha.re/
```
### Combining downloads as zip or tar.gz archive
```bash
$ 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 and send email with link (using an alias)
```bash
$ transfer /tmp/hello.txt | mail -s "Hello World" user@yourmaildomain.com
```
## Encrypting and decrypting
<a name="encrypting-and-decrypting"/>
### Encrypting files with password using gpg
```bash
$ cat /tmp/hello.txt | gpg -ac -o- | curl -X PUT --upload-file "-" https://file.unsha.re/test.txt
```
### Downloading and decrypting
```bash
$ curl https://file.unsha.re/1lDau/test.txt | gpg -o- > /tmp/hello.txt
```
### Import keys from [keybase](https://keybase.io/)
```bash
$ 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 xclip see https://command-not-found.com/xclip
- install xsel see https://command-not-found.com/xsel
Install later, add pbcopy and pbpaste to .bashrc or .zshrc or its equivalent.
- If use xclip, paste the following lines:
```sh
alias pbcopy='xclip -selection clipboard'
alias pbpaste='xclip -selection clipboard -o'
```
- If use xsel, paste the following lines:
```sh
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:
```sh
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:
```sh
$ 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
```