Skip to content

Repository files navigation

share

This is a command-line file sharing tool, which has just a single file and is easy to use.

Features

  • Crossing multiple platforms
  • Sharing directories, files and texts
  • Receiving files and texts
  • Password sharing
  • Basic authentication support
  • Range request support
  • TLS support
  • Zstd compression support (requires python-zstandard, optional and not needed on Python 3.14+)
  • QR code support (requires python-qrcode, optional)

Usage

usage: share.py [-b ADDRESS] [-p PORT] [-s] [-r] [-a] [-z] [-t] [-P [PASSWORD]] [-R RULE]
[-q] [-h] [-v] [--certfile CERTFILE] [--keyfile KEYFILE]
[--keypass KEYPASS]
[arguments ...]
positional arguments:
arguments a directory, files or texts
general options:
-b, --bind ADDRESS bind address [default: 0.0.0.0]
-p, --port PORT port [default: 8888]
-s, --share share mode (default mode)
-r, --receive receive mode, can be used with -s option (only for directory)
-a, --all show all files, including hidden ones (only for directory)
-z, --archive share the directory itself as an archive (only for directory)
-t, --text for text
-P, --password [PASSWORD]
access password, if no PASSWORD is specified, the environment
variable SHARE_PASSWORD will be used
-R, --auth-rule RULE a rule for authentication, can be used multiple times [default: *]
-q, --qrcode show the qrcode
-h, --help show this help message and exit
-v, --version show version number and exit
tls options:
--certfile CERTFILE cert file
--keyfile KEYFILE key file
--keypass KEYPASS key password

Auth Rules

An auth rule consists of two components: a pattern and an optional comma-separated list of HTTP methods, separated by a :.
Here are a few examples:

  • *, *:GET,POST,PUT or /*:GET,POST,PUT matches all paths for GET, POST and PUT
  • /foo/*:GET matches paths start with /foo/ and the path /foo.tar.zst for GET
  • *bar:POST,PUT matches paths end with bar for POST and PUT
  • /foo[ab]*:GET matches paths start with /fooa or /foob for GET

For full documentation on the pattern syntax, please see fnmatch.

Screenshot

img

Installation

Windows

You can download the latest release from the Release page.

Debian & Ubuntu

Install via the OBS repo (see obs-repo for setup).

Other Distros

Just download the script.

Tips

  • If you're sharing just one file, you can use the shortcut name file to access it:
    http://{host}:{port}/file
    # to save with the original filename
    wget --content-disposition http://{host}:{port}/file
    curl -OJ http://{host}:{port}/file
  • To get an archive of a folder, you can add the .tar.zst extension to the url:
    http://{host}:{port}/any/folder.tar.zst
  • If you want to upload files to the sharing server with curl, you can use:
    # POST
    curl -F file=@/path/to/file http://{host}:{port}
    # create new folders at the same time
    curl -F file=@/path/to/file http://{host}:{port}/custom/path/
    # PUT
    curl -T /path/to/file http://{host}:{port}
    # create new folders at the same time
    curl -T /path/to/file http://{host}:{port}/custom/path/
    # with a different filename
    curl -T /path/to/file http://{host}:{port}/custom/path/custom-filename
  • If you want to use HTTP Basic authentication, remember the username is always "user".

About

Share and receive files effortlessly over HTTP

Resources

Stars

51 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages