aim

github.com/mihaigalos/aim


Keywords
download, resume, upload, curl, download-resume, downloader, rust, wget
License
Other

Documentation

aim

CI crates.io

🎯 aim: A command line download/upload tool with resume.

resume example

Alternatives:

duma, grapple, rget.

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 source.file" -> Download.
    • aim source.file https://domain.com/source.file" -> Upload.
  • 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 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_MESSAGE_FORMAT="🎯 Transfering {url}"
    AIM_PROGRESSBAR_TEMPLATE="{msg}\n{spinner:.cyan}  {elapsed_precise} ▕{bar:.white}▏ {bytes}/{total_bytes}  {bytes_per_sec}  ETA {eta}."
    AIM_PROGRESSBAR_PROGRESS_CHARS="=>-"

Resume

  • Download resume:
    • http
    • ftp
  • Upload resume:
    • http implemented but experimental. You need a webserver implementing PUT ranges (or a patched version of nginx). _test_aim_put_resume_binary_file should cover this case.
    • ftp: pending.

Docker

For convenience, an alpine-based docker image is available, so arguments can be passed directly to it. Future versions will support single naming for all archs via manifests.

x64:

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

arm64/aarch64:

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