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 |
|
#76 in HTTP 客户端
120KB
3K SLoC
aim
A 命令行下载/上传工具,支持断点续传。

目录
❓ 为什么
简洁:根据参数顺序,默认设置下下载或上传文件。
💿︎ 安装
从 发布版 下载 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)ftp、ssh、s3(目前不支持断点续传)。
可选的 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

指示器
默认情况下,在上传/下载时显示进度条。可以通过内部使用的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://rust-lang.net.cn/ | htmlq --attribute href a
🔑 认证
URL 中的 Basicauth
只需使用以下语法protocol://user:pass@server:port。这可以用于所有http(s)、ftp、ssh和s3。
下载示例
aim ftp://user:pass@127.0.0.1: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_ID和AWS_SECRET_ACCESS_KEY。
🆕 更新
aim可以使用以下方式原地更新
aim --update
🐳 Docker
为了方便,提供了基于alpine的aarch64和x64的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
🛠️ 相似的工作
依赖项
~43–63MB
~1M SLoC