#resume #download #upload #cli #ssh-key

bin+lib aim

🎯 具有断点续传功能的命令行下载/上传工具

22 个稳定版本

1.8.5 2023年9月9日
1.8.3 2023年4月30日
1.8.2 2023年1月21日
1.8.0 2022年10月27日
0.0.3 2021年11月27日

#76 in HTTP 客户端

MIT 许可证

120KB
3K SLoC

aim

CI CD Security Audit codecov crates.io

A 命令行下载/上传工具,支持断点续传。

resume example

目录

❓ 为什么

简洁:根据参数顺序,默认设置下下载或上传文件。

💿︎ 安装

发布版 下载 Linux 或 MacOS 版本。关于如何在不同平台上独立运行,请参阅 Docker 部分。

如果您想从源代码构建,请使用

cargo install aim

💡 功能

功能矩阵

协议 下载 上传 断点续传 交互式模式
http(s)
ftp
sftp
ssh
s3

下载/上传

  • 默认动作由参数顺序暗示。
    • aim https://domain.com/ -> 显示内容。
    • aim https://domain.com/source.file . -> 下载。
    • aim source.file https://domain.com/destination.file -> 上传。
  • 支持 http(s)(s)ftpsshs3(目前不支持断点续传)。

可选的 sha256 校验

要验证下载是否与期望的校验和匹配,只需在调用 aim 时将其列出即可。

aim https://github.com/XAMPPRocky/tokei/releases/download/v12.0.4/tokei-x86_64-unknown-linux-gnu.tar.gz . 0e0f0d7139c8c7e3ff20cb243e94bc5993517d88e8be8d59129730607d5c631b

断点续传

请查阅 功能矩阵,以了解是否支持您希望使用的协议的传输。

支持断点续传的传输从特定的字节偏移量开始并继续。广泛的测试确保传输是字精确的(预期和实际传输工件之间的哈希比较)。

Node:如果您自己托管 http(s) 服务器,上传需要 PUT 范围(或 nginx修补版)。

交互式模式

简历示例此功能可以通过向调用传递---interactive标志来激活。

它允许您指定一个初始URL,然后通过模糊搜索在该URL中找到的链接进行导航。

控件

  • 开始输入,列出部分匹配项。
  • Tab展开路径并进入其中,列出内容。
  • /不展开路径进入,列出内容。
  • ..向上返回一级。
  • Enter最终完成交互并获取结果,对该结果执行所需操作。

此功能可以与下载期间的输出和/或共享文件夹结合使用。

下载过程中的输出

可以指定几种输出格式

  • aim source . - 下载到与源相同的文件名。
  • aim source + - 下载到与源相同的文件名,并尝试解压缩。读取目标扩展名并调用系统解压缩器。更多信息在这里
  • aim source destination - 下载到名为destination的新文件或现有文件。

共享文件夹

aim可以在一个设备上通过http提供文件夹,以便您可以在另一台设备上下载它。默认情况下,服务端口是8080或下一个空闲端口。

您可以选择在shell中设置环境变量AIM_HOSTING_PORT或在.env文件中为特定端口。

机器A

aim . # to serve current folder

机器B

aim http://ip_of_Machine_A:8080 # list contents
aim http://ip_of_Machine_A:8080/file . # download

此外,由于托管是通过http完成的,因此客户端甚至可以是浏览器:托管示例

服务器将日志打印到标准输出。要着色它们,您可以使用pipeview

aim . | pipeview --aim

hosting example logs

指示器

默认情况下,在上传/下载时显示进度条。可以通过内部使用的indicatif包配置指示器。

您可以通过设置正确的环境变量或在您调用的文件夹中创建一个.env文件来更改显示模板和进度字符

AIM_PROGRESSBAR_DOWNLOADED_MESSAGE="🎯 Downloaded {input} to {output}"
AIM_PROGRESSBAR_MESSAGE_FORMAT="🎯 Transferring {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}"
AIM_HOSTING_PORT=8080

默认情况下,如果内容长度 <1MB(容易显示远程内容),则不显示进度条。


输出

因为默认输出是stdout,所以aim可以连接到其他命令

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.net.cn/ | htmlq --attribute href a

🔑 认证

URL 中的 Basicauth

只需使用以下语法protocol://user:pass@server:port。这可以用于所有http(s)ftpsshs3

下载示例

aim ftp://user:[email protected]:21/myfile .

Netrc

创建一个名为.netrc的文件,具有在~或您从其中运行aim的当前文件夹中的读取权限,以自动登录到该端点

machine mydomain.com login myuser password mypass port server_port

SSH 密钥

自动尝试匹配以下模式的密钥

  • id_ed25519
  • id_rsa
  • keys/id_ed25519
  • keys/id_rsa
  • ~/.ssh/id_rsa
  • ~/.ssh/keys/id_ed25519

`.aws` 文件夹

AWS交互(例如:S3)的凭据会自动从~/.aws/credentials读取。

或者,将读取环境变量AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY


🆕 更新

aim可以使用以下方式原地更新

aim --update

🐳 Docker

为了方便,提供了基于alpine的aarch64x64的Docker镜像,可以直接向它们传递参数。

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

在机器 A 上托管

cd $(mktemp -d)
echo hello > myfile
docker run --rm -it -v $(pwd):/src --user $UID:$UID -p 8080:8080 mihaigalos/aim /src

在机器 B 上下载

调整IP以匹配机器A的IP。

docker run --rm -it -v $(pwd):/src --user $UID:$UID mihaigalos/aim http://192.168.0.24:8080/myfile /src/myfile

🛠️ 相似的工作

dumagrapplerget

依赖项

~43–63MB
~1M SLoC