aim 1.0.0

🎯 A command line download/upload tool with resume.
Documentation

aim

CI CD codecov crates.io docker pulls LoC

A command line download/upload tool with resume.

resume example

Why?

Simplicity: download or upload files depending on parameter order with default settings.

Features

  • default action implied from parameter order.

    • aim https://domain.com/ -> Display contents.
    • aim https://domain.com/source.file . -> Download.
    • aim source.file https://domain.com/source.file -> Upload.
  • support for http(s), ftp, ssh.

  • resumable file transfers.

  • optional check of sha256 checksum:

    aim https://github.com/XAMPPRocky/tokei/releases/download/v12.0.4/tokei-x86_64-unknown-linux-gnu.tar.gz . 0e0f0d7139c8c7e3ff20cb243e94bc5993517d88e8be8d59129730607d5c631b
    
  • automatic no display of progressbar if content length <1MB (easy display contents of remote).

  • defaults to stdout (pipe-able) to other commands:

    aim https://github.com/XAMPPRocky/tokei/releases/download/v12.0.4/tokei-x86_64-unknown-linux-gnu.tar.gz | tar xvz
    aim https://www.rust-lang.org/ | htmlq --attribute href a
    
  • use as curl alternative:

    aim https://raw.githubusercontent.com/mihaigalos/aim/main/README.md
    
  • configurable indicators via indicatif: you can change the display template and progress chars by either setting correct environment variables or creating a .env file in the folder you are calling from:

    AIM_PROGRESSBAR_DOWNLOADED_MESSAGE="🎯 Downloaded {input} to {output}"
    AIM_PROGRESSBAR_MESSAGE_FORMAT="🎯 Transfering {url}"
    AIM_PROGRESSBAR_PROGRESS_CHARS="=>-"
    AIM_PROGRESSBAR_TEMPLATE="{msg}\n{spinner:.cyan}  {elapsed_precise} ▕{bar:.white}▏ {bytes}/{total_bytes}  {bytes_per_sec}  ETA {eta}."
    AIM_PROGRESSBAR_UPLOADED_MESSAGE="🎯 Uploaded {input} to {output}"
    

Resume

Resume support for both download and upload for http(s), ftp.

Download and upload support for ssh, resume (using sftp) under development. Currently, only user/pass auth working for ssh. Key support under development.

If you're hosting a http(s) server yourself, upload needs PUT ranges (or a patched version of nginx).

Authentication

Create a file named .netrc with read permissions in ~ or the current folder you're running aim from to automate login to that endpoint:

machine mydomain.com login myuser password mypass port server_port

Docker

For convenience, alpine-based docker images for x64 and aarch64 are available, so arguments can be passed directly to them.

docker run --rm -it -v $(pwd):/src --user $UID:$UID mihaigalos/aim https://raw.githubusercontent.com/mihaigalos/aim/main/LICENSE.md

Similar work

duma, grapple, rget.