* Style and formatting cleanup * Bash transfer script and systemd unit file * Point docs to new url
6.4 KiB
Table of Contents
- Aliases
- Uploading and downloading
- Archiving and backups
- Encrypting and decrypting
- Uploading and copy download command
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 and send email with link (using an alias)
$ 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 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:
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
-
Open .bashrc or .zshrc or its equivalent.
-
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:
-
The first parameter is the path to upload the file.
-
The second parameter indicates which system's download command is copied. optional:
-
This parameter is empty to copy the download link.
-
l
orm
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