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://www.rust-lang.net.cn/ | htmlq --attribute href a
🔑 认证
URL 中的 Basicauth
只需使用以下语法protocol://user:pass@server:port
。这可以用于所有http(s)
、ftp
、ssh
和s3
。
下载示例
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_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