{"id":13452392,"url":"https://github.com/timvisee/ffsend","last_synced_at":"2025-05-13T15:09:26.621Z","repository":{"id":38314394,"uuid":"123954139","full_name":"timvisee/ffsend","owner":"timvisee","description":":mailbox_with_mail: Easily and securely share files from the command line. A fully featured Firefox Send client.","archived":false,"fork":false,"pushed_at":"2025-02-04T21:28:48.000Z","size":14029,"stargazers_count":7104,"open_issues_count":32,"forks_count":194,"subscribers_count":46,"default_branch":"master","last_synced_at":"2025-04-23T18:54:40.534Z","etag":null,"topics":["cli","encryption","file-sharing","file-upload","firefox-send","hacktoberfest","rust"],"latest_commit_sha":null,"homepage":"https://gitlab.com/timvisee/ffsend","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/timvisee.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["timvisee"],"custom":["https://timvisee.com/donate"],"patreon":"timvisee","ko_fi":"timvisee"}},"created_at":"2018-03-05T17:27:42.000Z","updated_at":"2025-04-22T00:06:43.000Z","dependencies_parsed_at":"2024-01-03T04:14:39.743Z","dependency_job_id":"86ebebe8-5ac5-4e40-94e4-e2bc82d970c4","html_url":"https://github.com/timvisee/ffsend","commit_stats":null,"previous_names":[],"tags_count":89,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timvisee%2Fffsend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timvisee%2Fffsend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timvisee%2Fffsend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timvisee%2Fffsend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/timvisee","download_url":"https://codeload.github.com/timvisee/ffsend/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253969239,"owners_count":21992262,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","encryption","file-sharing","file-upload","firefox-send","hacktoberfest","rust"],"created_at":"2024-07-31T07:01:22.832Z","updated_at":"2025-05-13T15:09:21.610Z","avatar_url":"https://github.com/timvisee.png","language":"Rust","readme":"[![Build status on GitLab CI][gitlab-ci-master-badge]][gitlab-ci-link]\n[![Newest release on crates.io][crate-version-badge]][crate-link]\n[![Project license][crate-license-badge]](LICENSE)\n\n[crate-license-badge]: https://img.shields.io/crates/l/ffsend.svg\n[crate-link]: https://crates.io/crates/ffsend\n[crate-version-badge]: https://img.shields.io/crates/v/ffsend.svg\n[gitlab-ci-link]: https://gitlab.com/timvisee/ffsend/pipelines\n[gitlab-ci-master-badge]: https://gitlab.com/timvisee/ffsend/badges/master/pipeline.svg\n\n*Notice: the default Send host is provided by [@timvisee][timvisee]\n([info](https://gitlab.com/timvisee/ffsend/-/issues/111)).\nPlease consider to [donate] and help keep it running.*\n\n# ffsend\n\n\u003e Easily and securely share files from the command line.\n\u003e A [Send][send] client.\n\nEasily and securely share files and directories from the command line through a\nsafe, private and encrypted link using a single simple command.\nFiles are shared using the [Send][send] service and may be up\nto 1GB. Others are able to download these files with this tool, or through\ntheir web browser.\n\n[![ffsend usage demo][usage-demo-svg]][usage-demo-asciinema]  \n_No demo visible here? View it on [asciinema][usage-demo-asciinema]._\n\nAll files are always encrypted on the client, and secrets are never shared with\nthe remote host. An optional password may be specified, and a default file\nlifetime of 1 (up to 20) download or 24 hours is enforced to ensure your stuff\ndoes not remain online forever.\nThis provides a secure platform to share your files.\nFind out more about security [here](#security).\n\n- [Features](#features)\n- [Usage](#usage)\n- [Requirements](#requirements)\n- [Install](#install) ([Linux](#linux-all-distributions), [macOS](#macos), [Windows](#windows), [FreeBSD](#freebsd), [Android](#android), [_Other OS/arch_](#other-os-or-architecture))\n- [Build](#build)\n- [Configuration and environment](#configuration-and-environment)\n- [Security](#security)\n- [Help](#help)\n- [Special thanks](#special-thanks)\n- [License](#license)\n\nThe public [Send][send] service that is used as default host is provided by\n[@timvisee][timvisee] ([info](https://gitlab.com/timvisee/ffsend/-/issues/111)).  \nThis application is not affiliated with [Firefox][firefox] or\n[Mozilla][mozilla] in any way.\n\n_Note: this tool is currently in beta, as some extra desired features are yet to be implemented_\n\n## Features\n- Fully featured and friendly command line tool\n- Upload and download files and directories securely, always encrypted on the client\n- Additional password protection, generation and configurable download limits\n- File and directory archiving and extraction\n- Built-in share URL shortener and QR code generator\n- Supports Send v3 (current) and v2\n- History tracking your files for easy management\n- Ability to use your own Send hosts\n- Inspect or delete shared files\n- Accurate error reporting\n- Streaming encryption and uploading/downloading, very low memory footprint\n- Intended for use in [scripts](#scriptability) without interaction\n\nFor a list of upcoming features and ideas, take a look at the\ncurrent [open issues](https://gitlab.com/timvisee/ffsend/issues) over on GitLab.\n\n## Usage\nEasily upload and download:\n\n```bash\n# Simple upload\n$ ffsend upload my-file.txt\nhttps://send.vis.ee/#sample-share-url\n\n# Advanced upload\n# - Specify a download limit of 1\n# - Specify upload expiry time of 5 minutes\n# - Enter a password to encrypt the file\n# - Archive the file before uploading\n# - Copy the shareable link to your clipboard\n# - Open the shareable link in your browser\n$ ffsend upload --downloads 1 --expiry-time 5m --password --archive --copy --open my-file.txt\nPassword: ******\nhttps://send.vis.ee/#sample-share-url\n\n# Upload to your own host\n$ ffsend u -h https://example.com/ my-file.txt\nhttps://example.com/#sample-share-url\n\n# Simple download\n$ ffsend download https://send.vis.ee/#sample-share-url\n```\n\nInspect remote files:\n\n```bash\n# Check if a file exists\n$ ffsend exists https://send.vis.ee/#sample-share-url\nExists: yes\n\n# Fetch remote file info\n$ ffsend info https://send.vis.ee/#sample-share-url\nID:         b087066715\nName:       my-file.txt\nSize:       12 KiB\nMIME:       text/plain\nDownloads:  0 of 10\nExpiry:     18h2m (64928s)\n```\n\nOther commands include:\n\n```bash\n# View your file history\n$ ffsend history\n#  LINK                                        EXPIRE\n1  https://send.vis.ee/#sample-share-url  23h57m\n2  https://send.vis.ee/#other-sample-url  17h38m\n3  https://example.com/#sample-share-url       37m30s\n\n# Change the password after uploading\n$ ffsend password https://send.vis.ee/#sample-share-url\nPassword: ******\n\n# Delete a file\n$ ffsend delete https://send.vis.ee/#sample-share-url\n```\n\nUse the `--help` flag, `help` subcommand, or see the [help](#help) section for\nall available subcommands.\n\n## Requirements\n- Linux, macOS, Windows, FreeBSD, Android (other BSDs might work)\n- A terminal :sunglasses:\n- Internet connection\n- Linux:\n  - OpenSSL \u0026 CA certificates:\n    - Ubuntu, Debian and derivatives: `apt install openssl ca-certificates`\n  - Optional: `xclip` or `xsel` for clipboard support\n    - Ubuntu, Debian and derivatives: `apt install xclip`\n    - CentOS/Red Hat/openSUSE/Fedora: `yum install xclip`\n    - Arch: `pacman -S xclip`\n- Windows specific:\n  - Optional OpenSSL with `crypto-openssl` feature: [» Installer][openssl-windows-installer] (`v1.1.0j` or above)\n- macOS specific:\n  - Optional OpenSSL with `crypto-openssl` feature: `brew install openssl@1.1`\n- FreeBSD specific:\n  - OpenSSL: `pkg install openssl`\n  - CA certificates: `pkg install ca_root_nss`\n  - Optional `xclip` \u0026 `xsel` for clipboard support: `pkg install xclip xsel-conrad`\n- Android specific:\n  - Termux: [» Termux][termux]\n\n## Install\nBecause `ffsend` is still in early stages, only limited installation options are\navailable right now. Feel free to contribute additional packages.\n\nMake sure you meet and install the [requirements](#requirements).\n\nSee the operating system specific instructions below:\n- [Linux](#linux-all-distributions)\n- [macOS](#macos)\n- [Windows](#windows)\n- [FreeBSD](#freebsd)\n- [Android](#android)\n- [_Other OS or architecture_](#other-os-or-architecture)\n\n### Linux (all distributions)\nUsing the [snap](#linux-snap-package) package is recommended if supported.  \nAlternatively you may install it manually using the\n[prebuilt binaries](#linux-prebuilt-binaries).\n\nOnly 64-bit (`x86_64`) packages and binaries are provided.\nFor other architectures and configurations you may [compile from source](#build).\n\nMore packages options will be coming soon.\n\n#### Linux: snap package\n_Note: The `ffsend` `snap` package is isolated, and can only access files in\nyour home directory. Choose a different installation option if you don't want\nthis limitation._\n\n_Note: due to how `snap` is configured by default, you won't be able to use the\npackage from some contexts such as through SSH without manual modifications. If\nyou're experiencing problems, please refer to a different installation method\nsuch as the [prebuilt binaries](#linux-prebuilt-binaries), or open an issue._\n_Note: if you want to read/write to a flash drive run `snap connect ffsend:removable-media`\n\n[» `ffsend`][snapcraft-ffsend]\n\n```bash\nsnap install ffsend\nffsend --help\n```\n\n#### Linux: Arch AUR packages\n[» `ffsend-bin`][aur-ffsend-bin] (precompiled binary, latest release, recommended)  \n[» `ffsend`][aur-ffsend] (compiles from source, latest release)  \n[» `ffsend-git`][aur-ffsend-git] (compiles from source, latest `master` commit)\n\n```bash\nyay -S ffsend\n# or\naurto add ffsend-bin\nsudo pacman -S ffsend-bin\n# or using any other AUR helper\n\nffsend --help\n```\n\n#### Linux: Nix package\n_Note: The Nix package is currently not automatically updated, and might be\nslightly outdated._\n\n[» ffsend][nix-ffsend]\n\n```bash\nnix-channel --update\nnix-env --install ffsend\n\nffsend --help\n```\n\n#### Linux: Fedora package\n_Note: The Fedora package is maintained by contributors, and might be\nslightly outdated._\n\n[» ffsend][fedora-ffsend]\n\n```bash\nsudo dnf install ffsend\n\nffsend --help\n```\n\n#### Linux: Alpine package\n_Note: The Alpine package is maintained by contributors, it might be outdated.\nChoose a different installation method if an important update is missing._\n\n[» ffsend][alpine-ffsend]\n\n```bash\napk add ffsend --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing\n\nffsend --help\n```\n\n#### Linux: Prebuilt binaries\nCheck out the [latest release][github-latest-release] assets for Linux binaries.  \nUse the `ffsend-v*-linux-x64-static` binary, to minimize the chance for issues.\nIf it isn't available yet, you may use an artifact from a\n[previous version][github-releases] instead, until it is available.\n\nMake sure you meet and install the [requirements](#requirements) before you\ncontinue.\n\nYou must make the binary executable, and may want to move it into `/usr/bin` to\nmake it easily executable:\n\n```bash\n# Rename binary to ffsend\nmv ./ffsend-* ./ffsend\n\n# Mark binary as executable\nchmod a+x ./ffsend\n\n# Move binary into path, to make it easily usable\nsudo mv ./ffsend /usr/local/bin/\n\nffsend --help\n```\n\n### macOS\nUsing the [`homebrew` package](#macos-homebrew-package) is recommended.  \nAlternatively you may install it via [MacPorts](#macos-macports), or manually using the\n[prebuilt binaries](#macos-prebuilt-binaries).\n\n#### macOS: homebrew package\nMake sure you've [`homebrew`][homebrew] installed, and run:\n\n```bash\nbrew install ffsend\nffsend --help\n```\n\n#### macOS: MacPorts\n_Note: ffsend in MacPorts is currently not automatically updated, and might be\nslightly outdated._\n\nOnce you have [MacPorts](https://www.macports.org) installed, you can run:\n\n```bash\nsudo port selfupdate\nsudo port install ffsend\n```\n\n#### macOS: Nix package\n_Note: The Nix package is currently not automatically updated, and might be\nslightly outdated._\n\n```bash\nnix-channel --update\nnix-env --install ffsend\n\nffsend --help\n```\n\n#### macOS: Prebuilt binaries\nCheck out the [latest release][github-latest-release] assets for a macOS binary.\nIf it isn't available yet, you may use an artifact from a\n[previous version][github-releases] instead, until it is available.\n\nThen, mark the downloaded binary as an executable.\nYou then may want to move it into `/usr/local/bin/` to make the `ffsend` command\nglobally available:\n\n```bash\n# Rename file to ffsend\nmv ./ffsend-* ./ffsend\n\n# Mark binary as executable\nchmod a+x ./ffsend\n\n# Move binary into path, to make it easily usable\nsudo mv ./ffsend /usr/local/bin/\n\nffsend\n```\n\n### Windows\nUsing the [`scoop` package](#windows-scoop-package) is recommended.  \nAlternatively you may install it manually using the\n[prebuilt binaries](#windows-prebuilt-binaries).\n\nIf you're using the [Windows Subsystem for Linux][wsl], it's highly recommended\nto install the [prebuilt Linux binary](#prebuilt-binaries-for-linux) instead.\n\nOnly 64-bit (`x86_64`) binaries are provided.\nFor other architectures and configurations you may [compile from source](#build).\n\nA `chocolatey` package along with an `.msi` installer will be coming soon.\n\n#### Windows: scoop package\nMake sure you've [`scoop`][scoop-install] installed, and run:\n\n```bash\nscoop install ffsend\nffsend --help\n```\n\n#### Windows: Prebuilt binaries\nCheck out the [latest release][github-latest-release] assets for Windows binaries.\nUse the `ffsend-v*-windows-x64-static` binary, to minimize the chance for issues.\nIf it isn't available yet, you may use an artifact from a\n[previous version][github-releases] instead, until it is available.\n\nYou can use `ffsend` from the command line in the same directory:\n```cmd\n.\\ffsend.exe --help\n```\n\nTo make it globally invocable as `ffsend`, you must make the binary available in\nyour systems `PATH`. The easiest solution is to move it into `System32`:\n```cmd\nmove .\\ffsend.exe C:\\Windows\\System32\\ffsend.exe\n```\n\n### FreeBSD\n\n[» `ffsend`][freshports-ffsend]\n\n_Note: The FreeBSD package is currently maintained by FreeBSD contributors,\nand might be slightly outdated._\n\n```sh\n# Precompiled binary.\npkg install ffsend\n\n# Compiles and installs from source.\ncd /usr/ports/www/ffsend \u0026\u0026 make install\n```\n\n### Android\n`ffsend` can be used on Android through Termux, install it first:\n[» Termux][termux]\n\n_Note: The Android package is currently maintained by Termux contributors,\nand might be slightly outdated._\n\n```sh\n# Install package.\npkg install ffsend\n\nffsend help\n```\n\n### Other OS or architecture\nIf your system runs Docker, you can use the [docker image](#docker-image).\nThere are currently no other binaries or packages available.\n\nYou can [build the project from source](#build) instead.\n\n#### Docker image\nA Docker image is available for using `ffsend` running in a container.\nMount a directory to `/data`, so it's accessible for `ffsend` in the container,\nand use the command as you normally would.\n\n[» `timvisee/ffsend`][docker-hub-ffsend]\n\n```bash\n# Invoke without arguments\ndocker run --rm -it -v $(pwd):/data timvisee/ffsend\n\n# Upload my-file.txt\ndocker run --rm -it -v $(pwd):/data timvisee/ffsend upload my-file.txt\n\n# Download from specified link\ndocker run --rm -it -v $(pwd):/data timvisee/ffsend download https://send.vis.ee/#sample-share-url\n\n# Show help\ndocker run --rm -it -v $(pwd):/data timvisee/ffsend help\n\n# To update the used image\ndocker pull timvisee/ffsend\n```\n\nOn Linux or macOS you might define a alias in your shell configuration, to make\nit invocable as `ffsend`:\n\n```bash\nalias ffsend='docker run --rm -it -v \"$(pwd):/data\" timvisee/ffsend'\n```\n\n_Note: This implementation is limited to accessing the paths you make available\nthrough the specified mount._\n\n## Build\nTo build and install `ffsend` yourself, you meet the following requirements\nbefore proceeding:\n\n### Build requirements\n- Runtime [requirements](#requirements)\n- [`git`][git]\n- [`rust`][rust] `v1.63` (MSRV) or higher (install using [`rustup`][rustup])\n- [OpenSSL][openssl] or [LibreSSL][libressl] libraries/headers:\n  - Linux:\n    - Ubuntu, Debian and derivatives: `apt install build-essential cmake pkg-config libssl-dev`\n    - CentOS/Red Hat/openSUSE: `yum install gcc gcc-c++ make cmake openssl-devel`\n    - Arch: `pacman -S openssl base-devel`\n    - Gentoo: `emerge -a dev-util/pkgconfig dev-util/cmake dev-libs/openssl`\n    - Fedora: `dnf install gcc gcc-c++ make cmake openssl-devel`\n    - Or see instructions [here](https://github.com/sfackler/rust-openssl#linux)\n  - Windows:\n    - Optional with `crypto-openssl` feature: See instructions here [here](https://github.com/sfackler/rust-openssl#windows-msvc)\n  - macOS:\n    - Optional with `crypto-openssl` feature: `brew install cmake pkg-config openssl` or see instructions [here](https://github.com/sfackler/rust-openssl#osx)\n  - FreeBSD:\n    - `pkg install rust gmake pkgconf python36 libxcb xclip ca_root_nss xsel-conrad`\n    - It is a better idea to use \u0026 modify the existing `ffsend` port, which manages dependencies for you.\n\n### Compile and install\nThen, walk through one of the following steps to compile and install `ffsend`:\n\n- Compile and install it directly from cargo:\n\n  ```bash\n  # Compile and install from cargo\n  cargo install ffsend -f\n\n  # Start using ffsend\n  ffsend --help\n  ```\n\n- Or clone the repository and install it with `cargo`:\n\n  ```bash\n  # Clone the project\n  git clone https://github.com/timvisee/ffsend.git\n  cd ffsend\n\n  # Compile and install\n  cargo install --path . -f\n\n  # Start using ffsend\n  ffsend --help\n\n  # or run it directly from cargo\n  cargo run --release -- --help\n  ```\n\n- Or clone the repository and invoke the binary directly (Linux/macOS):\n\n  ```bash\n  # Clone the project\n  git clone https://github.com/timvisee/ffsend.git\n  cd ffsend\n\n  # Build the project (release version)\n  cargo build --release\n\n  # Start using ffsend\n  ./target/release/ffsend --help\n  ```\n\n### Compile features / use flags\nDifferent use flags are available for `ffsend` to toggle whether to include\nvarious features.\nThe following features are available, some of which are enabled by default:\n\n| Feature         | Enabled | Description                                                |\n| :-------------: | :-----: | :--------------------------------------------------------- |\n| `send2`         | Default | Support for Send v2 servers                                |\n| `send3`         | Default | Support for Send v3 servers                                |\n| `crypto-ring`   | Default | Use ring as cryptography backend                           |\n| `crypto-openssl`|         | Use OpenSSL as cryptography backend                        |\n| `clipboard`     | Default | Support for copying links to the clipboard                 |\n| `history`       | Default | Support for tracking files in history                      |\n| `archive`       | Default | Support for archiving and extracting uploads and downloads |\n| `qrcode`        | Default | Support for rendering a QR code for a share URL            |\n| `urlshorten`    | Default | Support for shortening share URLs                          |\n| `infer-command` | Default | Support for inferring subcommand based on binary name      |\n| `no-color`      |         | Compile without color support in error and help messages   |\n\nTo enable features during building or installation, specify them with\n`--features \u003cfeatures...\u003e` when using `cargo`.\nYou may want to disable default features first using\n`--no-default-features`.\nHere are some examples:\n\n```bash\n# Defaults set of features with no-color, one of\ncargo install --features no-color\ncargo build --release --features no-color\n\n# No default features, except required\ncargo install --no-default-features --features send3,crypto-ring\n\n# With history and clipboard support\ncargo install --no-default--features --features send3,crypto-ring,history,clipboard\n```\n\nFor Windows systems it is recommended to provide the `no-color` flag, as color\nsupport in Windows terminals is flaky.\n\n## Configuration and environment\nThe following environment variables may be used to configure the following\ndefaults. The CLI flag is shown along with it, to better describe the relation\nto command line arguments:\n\n| Variable                  | CLI flag                       | Description                                   |\n| :------------------------ | :----------------------------: | :-------------------------------------------- |\n| `FFSEND_HISTORY`          | `--history \u003cFILE\u003e`             | History file path                             |\n| `FFSEND_HOST`             | `--host \u003cURL\u003e`                 | Upload host                                   |\n| `FFSEND_TIMEOUT`          | `--timeout \u003cSECONDS\u003e`          | Request timeout (0 to disable)                |\n| `FFSEND_TRANSFER_TIMEOUT` | `--transfer-timeout \u003cSECONDS\u003e` | Transfer timeout (0 to disable)               |\n| `FFSEND_EXPIRY_TIME`      | `--expiry-time \u003cSECONDS\u003e`      | Default upload expiry time                    |\n| `FFSEND_DOWNLOAD_LIMIT`   | `--download-limit \u003cDOWNLOADS\u003e` | Default download limit                        |\n| `FFSEND_API`              | `--api \u003cVERSION\u003e`              | Server API version, `-` to lookup             |\n| `FFSEND_BASIC_AUTH`       | `--basic-auth \u003cUSER:PASSWORD\u003e` | Basic HTTP authentication credentials to use. |\n\nThese environment variables may be used to toggle a flag, simply by making them\navailable. The actual value of these variables is ignored, and variables may be\nempty.\n\n| Variable             | CLI flag        | Description                        |\n| :------------------- | :-------------: | :--------------------------------- |\n| `FFSEND_FORCE`       | `--force`       | Force operations                   |\n| `FFSEND_NO_INTERACT` | `--no-interact` | No interaction for prompts         |\n| `FFSEND_YES`         | `--yes`         | Assume yes for prompts             |\n| `FFSEND_INCOGNITO`   | `--incognito`   | Incognito mode, don't use history  |\n| `FFSEND_OPEN`        | `--open`        | Open share link of uploaded file   |\n| `FFSEND_ARCHIVE`     | `--archive`     | Archive files uploaded             |\n| `FFSEND_EXTRACT`     | `--extract`     | Extract files downloaded           |\n| `FFSEND_COPY`        | `--copy`        | Copy share link to clipboard       |\n| `FFSEND_COPY_CMD`    | `--copy-cmd`    | Copy download command to clipboard |\n| `FFSEND_QUIET`       | `--quiet`       | Log quiet information              |\n| `FFSEND_VERBOSE`     | `--verbose`     | Log verbose information            |\n\nSome environment variables may be set at compile time to tweak some defaults.\n\n| Variable     | Description                                                                |\n| :----------- | :------------------------------------------------------------------------- |\n| `XCLIP_PATH` | Set fixed `xclip` binary path when using `clipboard-bin` (Linux, \u0026ast;BSD) |\n| `XSEL_PATH`  | Set fixed `xsel` binary path when using `clipboard-bin` (Linux, \u0026ast;BSD)  |\n\nAt this time, no configuration or _dotfile_ file support is available.\nThis will be something added in a later release.\n\n### Binary for each subcommand: `ffput`, `ffget`\n`ffsend` supports having a separate binaries for single subcommands, such as\nhaving `ffput` and `ffget` just for to upload and download using `ffsend`.\nThis allows simple and direct commands like:\n```bash\nffput my-file.txt\nffget https://send.vis.ee/#sample-share-url\n```\n\nThis works for a predefined list of binary names:\n\n- `ffput` → `ffsend upload ...`\n- `ffget` → `ffsend download ...`\n- `ffdel` → `ffsend delete ...`\n- _This list is defined in [`src/config.rs`](./src/config.rs) as `INFER_COMMANDS`_\n\nYou can use the following methods to set up these single-command binaries:\n\n- Create a properly named symbolic link (recommended)\n- Create a properly named hard link\n- Clone the `ffsend` binary, and rename it\n\nOn Linux and macOS you can use the following command to set up symbolic links in\nthe current directory:\n\n```bash\nln -s $(which ffsend) ./ffput\nln -s $(which ffsend) ./ffget\n```\n\nSupport for this feature is only available when `ffsend` is compiled with the\n[`infer-command`](#compile-features--use-flags) feature flag.\nThis is usually enabled by default.\nTo verify support is available with an existing installation, make sure the\nfeature is listed when invoking `ffsend debug`.\n\nNote that the `snap` package does currently not support this due to how this\npackage format works.\n\n### Scriptability\n`ffsend` is optimized for use in automated scripts. It provides some specialized\narguments to control `ffsend` without user interaction.\n\n- `--no-interact` (`-I`): do not allow user interaction. For prompts not having\n    a default value, the application will quit with an error, unless `--yes`\n    or `--force` is provided.\n    This should **always** be given when using automated scripting.  \n    Example: when uploading a directory, providing this flag will stop the\n    archive question prompt form popping up, and will archive the directory as\n    default option.\n- `--yes` (`-y`): assume the yes option for yes/no prompt by default.  \n    Example: when downloading a file that already exists, providing this flag\n    will assume yes when asking to overwrite a file.\n- `--force` (`-f`): force to continue with the action, skips any warnings that\n    would otherwise quit the application.  \n    Example: when uploading a file that is too big, providing this flag will\n    ignore the file size warning and forcefully continues.\n- `--quiet` (`-q`): be quiet, print as little information as possible.  \n    Example: when uploading a file, providing this flag will only output the\n    final share URL.\n\nGenerally speaking, use the following rules when automating:\n- Always provide `--no-interact` (`-I`).\n- Provide any combination of `--yes` (`-y`) and `--force` (`-f`) for actions you\n  want to complete no matter what.\n- When passing share URLs along, provide the `--quiet` (`-q`) flag, when\n  uploading for example.\n\nThese flags can also automatically be set by defining environment variables as\nspecified here:  \n[» Configuration and environment](#configuration-and-environment)\n\nHere are some examples commands in `bash`:\n\n```bash\n# Stop on error\nset -e\n\n# Upload a file\n# -I: no interaction\n# -y: assume yes\n# -q: quiet output, just return the share link\nURL=$(ffsend -Iy upload -q my-file.txt)\n\n# Render file information\n# -I: no interaction\n# -f: force, just show the info\nffsend -If info $URL\n\n# Set a password for the uploaded file\nffsend -I password $URL --password=\"secret\"\n\n# Use the following flags automatically from now on\n# -I: no interaction\n# -f: force\n# -y: yes\nexport FFSEND_NO_INTERACT=1 FFSEND_FORCE=1 FFSEND_YES=1\n\n# Download the uploaded file, overwriting the local variant due to variables\nffsend download $URL --password=\"secret\"\n```\n\nFor more information on these arguments, invoke `ffsend help` and check out:\n[» Configuration and environment](#configuration-and-environment)\n\nFor other questions regarding automation or feature requests, be sure to\n[open](https://github.com/timvisee/ffsend/issues/) an issue.\n\n## Security\nIn short; the `ffsend` tool and the [Send][send] service can be considered\nsecure, and may be used to share sensitive files. Note though that the\ncreated share link for an upload will allow anyone to download the file.\nMake sure you don't share this link with unauthorized people.\n\nFor more detailed information on encryption, please read the rest of the\nparagraphs in this security section.\n\n_Note: even though the encryption method is considered secure, this `ffsend`\ntool does not provide any warranty in any way, shape or form for files that\nsomehow got decrypted without proper authorization._\n\n#### Client side encryption\n`ffsend` uses client side encryption, to ensure your files are securely\nencrypted before they are uploaded to the remote host. This makes it impossible\nfor third parties to decrypt your file without having the secret (encryption\nkey). The file and its metadata are encrypted using `128-bit AES-GCM`, and a\n`HMAC SHA-256` signing key is used for request authentication.\nThis is consistent with the encryption documentation provided by the\n[Send][send] service, `ffsend` is a tool for.\n\nA detailed list on the encryption/decryption steps, and on what encryption is\nexactly used can be found [here][send-encryption] in the official service\ndocumentation.\n\n#### Note on share link security\nThe encryption secret, that is used to decrypt the file when downloading,\nis included in the share URL behind the `#` (hash). This secret is never sent\nthe remote server directly when using the share link in your browser.\nIt would be possible however for a webpage to load some malicious JavaScript\nsnippet that eventually steals the secret from the link once the page is loaded.\nAlthough this scenario is extremely unlikely, there are some options to prevent\nthis from happening:\n\n- Only use this `ffsend` tool, do not use the share link in your browser.\n- Add additional protection by specifying a password using `--password` while\n  uploading, or using the `password` subcommand afterwards.\n- Host a secure [Send][send] service instance yourself.\n\nA complete overview on encryption can be found in the official service\ndocumentation [here][send-encryption].\n\n## Help\n```\n$ ffsend help\n\nffsend 0.2.72\nTim Visee \u003c3a4fb3964f@sinenomine.email\u003e\nEasily and securely share files from the command line.\nA fully featured Send client.\n\nThe default public Send host is provided by Tim Visee, @timvisee.\nPlease consider to donate and help keep it running: https://vis.ee/donate\n\nUSAGE:\n    ffsend [FLAGS] [OPTIONS] [SUBCOMMAND]\n\nFLAGS:\n    -f, --force          Force the action, ignore warnings\n    -h, --help           Prints help information\n    -i, --incognito      Don't update local history for actions\n    -I, --no-interact    Not interactive, do not prompt\n    -q, --quiet          Produce output suitable for logging and automation\n    -V, --version        Prints version information\n    -v, --verbose        Enable verbose information and logging\n    -y, --yes            Assume yes for prompts\n\nOPTIONS:\n    -A, --api \u003cVERSION\u003e                 Server API version to use, '-' to lookup [env: FFSEND_API]\n        --basic-auth \u003cUSER:PASSWORD\u003e    Protected proxy HTTP basic authentication credentials (not FxA) [env: FFSEND_BASIC_AUTH]\n    -H, --history \u003cFILE\u003e                Use the specified history file [env: FFSEND_HISTORY]\n    -t, --timeout \u003cSECONDS\u003e             Request timeout (0 to disable) [env: FFSEND_TIMEOUT]\n    -T, --transfer-timeout \u003cSECONDS\u003e    Transfer timeout (0 to disable) [env: FFSEND_TRANSFER_TIMEOUT]\n\nSUBCOMMANDS:\n    upload        Upload files [aliases: u, up]\n    download      Download files [aliases: d, down]\n    debug         View debug information [aliases: dbg]\n    delete        Delete a shared file [aliases: del, rm]\n    exists        Check whether a remote file exists [aliases: e]\n    generate      Generate assets [aliases: gen]\n    help          Prints this message or the help of the given subcommand(s)\n    history       View file history [aliases: h]\n    info          Fetch info about a shared file [aliases: i]\n    parameters    Change parameters of a shared file [aliases: params]\n    password      Change the password of a shared file [aliases: pass, p]\n    version       Determine the Send server version [aliases: v]\n\nThis application is not affiliated with Firefox or Mozilla.\n```\n\n## Special thanks\n- to all `ffsend` source/package contributors\n- to [Mozilla][mozilla] for building the amazing [Firefox Send][mozilla-send] service ([fork][timvisee-send])\n- to everyone involved with [asciinema][asciinema] and [svg-term][svg-term] for\n  providing tools to make great visual demos\n- to everyone involved in all crate dependencies used\n\n## License\nThis project is released under the GNU GPL-3.0 license.\nCheck out the [LICENSE](LICENSE) file for more information.\n\n[usage-demo-asciinema]: https://asciinema.org/a/182225\n[usage-demo-svg]: https://cdn.rawgit.com/timvisee/ffsend/6e8ef55b/res/demo.svg\n[firefox]: https://firefox.com/\n[git]: https://git-scm.com/\n[libressl]: https://libressl.org/\n[mozilla]: https://mozilla.org/\n[openssl]: https://www.openssl.org/\n[openssl-windows-installer]: https://u.visee.me/dl/openssl/Win64OpenSSL_Light-1_1_0j.exe\n[termux]: https://termux.com/\n[rust]: https://rust-lang.org/\n[rustup]: https://rustup.rs/\n[send]: https://github.com/timvisee/send\n[mozilla-send]: https://github.com/mozilla/send\n[timvisee-send]: https://github.com/timvisee/send\n[send-encryption]: https://github.com/timvisee/send/blob/master/docs/encryption.md\n[asciinema]: https://asciinema.org/\n[svg-term]: https://github.com/marionebl/svg-term-cli\n[github-releases]: https://github.com/timvisee/ffsend/releases\n[github-latest-release]: https://github.com/timvisee/ffsend/releases/latest\n[nix-ffsend]: https://nixos.org/nixos/packages.html?attr=ffsend\u0026channel=nixos-unstable\u0026query=ffsend\n[fedora-ffsend]: https://src.fedoraproject.org/rpms/rust-ffsend\n[aur-ffsend]: https://aur.archlinux.org/packages/ffsend/\n[aur-ffsend-bin]: https://aur.archlinux.org/packages/ffsend-bin/\n[aur-ffsend-git]: https://aur.archlinux.org/packages/ffsend-git/\n[alpine-ffsend]: https://pkgs.alpinelinux.org/packages?name=ffsend\u0026branch=edge\n[snapcraft-ffsend]: https://snapcraft.io/ffsend\n[homebrew]: https://brew.sh/\n[wsl]: https://docs.microsoft.com/en-us/windows/wsl/install-win10\n[docker-hub-ffsend]: https://hub.docker.com/r/timvisee/ffsend\n[scoop-install]: https://scoop.sh/#installs-in-seconds\n[freshports-ffsend]: https://www.freshports.org/www/ffsend\n[timvisee]: https://timvisee.com/\n[donate]: https://timvisee.com/donate\n","funding_links":["https://github.com/sponsors/timvisee","https://timvisee.com/donate","https://patreon.com/timvisee","https://ko-fi.com/timvisee"],"categories":["Rust","Files and Directories","Other","HarmonyOS","Programming Languages","cli","\u003ca name=\"transfer\"\u003e\u003c/a\u003eData transfer","\u003ca id=\"1d9dec1320a5d774dc8e0e7604edfcd3\"\u003e\u003c/a\u003e工具-新添加的","Security"],"sub_categories":["File Sync/Sharing","Windows Manager","Rust","\u003ca id=\"8f1b9c5c2737493524809684b934d49a\"\u003e\u003c/a\u003e文章\u0026\u0026视频"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimvisee%2Fffsend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimvisee%2Fffsend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimvisee%2Fffsend/lists"}