12 个版本
0.2.0-rc.1 | 2024年5月12日 |
---|---|
0.1.2 | 2023年4月5日 |
0.1.1 | 2023年3月13日 |
0.0.8 | 2022年12月11日 |
0.0.5 | 2022年2月28日 |
#136 在 命令行工具
每月 22 次下载
68KB
1.5K SLoC
又一个 S3 命令行工具,通过环境变量驱动,为每个存储桶或配置文件提供凭证。
注意:使用
v0.2.0-rc.1
版本,因为它已更新为使用 AWS SDK 1.x,并包括新的功能,如clean
和cp ... --overwrite etag
。
关键点
- 使用官方的 AWS-SDK-S3 和相关 AWS SDK 库。
- 凭证由环境变量驱动(每个存储桶,每个配置文件,并回退到 AWS CLI 默认值)。
- 旨在模拟大部分官方的
aws s3 ...
命令行(然而,它并不是非常死板)。 - 计划最终提供库。
注意:已在 Mac 和 Linux 上测试(可能在 Windows 上无法工作,欢迎贡献)。
安装
# With Cargo install
cargo install ss3
命令示例
# list all buckets (assuming appropriate access)
ss3 ls s3://
# list all object and prefixes (-r for recursive)
ss3 ls s3://my-bucket -r
# list all object and prefixes (--info to display total count & size, also per extensions)
ss3 ls s3://my-bucket -r --info
# Upload a single file
ss3 cp ./image-01.jpg s3://my-bucket/my-folder
# Upload full folder (recursive)
ss3 cp ./ s3://my-bucket/my-folder/ -r
# Upload full folder with "text/html" content-type for file without extension
# (rather than fall back "application/octet-stream")
ss3 cp ./ s3://my-bucket/my-folder/ -r --noext-ct "text/html"
# Upload full folder except the *.mp4
ss3 cp ./ s3://my-bucket/my-folder/ -e "*.mp4" -r
# Upload full folder but only the *.mp4 and *.jpg
ss3 cp ./ s3://my-bucket/my-folder/ -i "*.mp4" -i "*.jpg" -r
# Download a single file to a local directory (parent dirs will be )
ss3 cp s3://my-bucket/image-01.jpg ./.downloads/
# Download a full folder (for now make sure to add end '/' in the s3 URL to distinguish from object)
ss3 cp s3://my-bucket/my-folder/ ./.downloads/ -r
配置
以下将按照以下顺序解析凭证
- 首先检查以下
SS3_BUCKET_...
环境中给定的存储桶SS3_BUCKET_bucket_name_KEY_ID
SS3_BUCKET_bucket_name_KEY_SECRET
SS3_BUCKET_bucket_name_REGION
SS3_BUCKET_bucket_name_ENDPOINT
(可选,用于 Minio)
- 其次,当指定
--profile profile_name
时,检查以下SS3_PROFILE_...
环境SS3_PROFILE_profile_name_KEY_ID
SS3_PROFILE_profile_name_KEY_SECRET
SS3_PROFILE_profile_name_REGION
SS3_PROFILE_profile_name_ENDPOINT
(可选,用于 Minio)
- 当指定
--profile profile_name
且没有配置文件环境时,将检查默认的 AWS 配置文件 - 作为最后的备选方案,使用默认的 AWS 环境变量
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION
AWS_ENDPOINT
(可选,用于 Minio)
注意:配置文件和存储桶名称中的 '-' 字符将被替换为 '_' 以形成上述环境变量名称。因此,存储桶名称
my-bucket-001
将映射到环境变量SS3_BUCKET_my_bucket_001_KEY_ID
...
其他示例
# ls
ss3 ls s3://my-bucket
# UPLOAD - cp file to s3 dir
ss3 cp ./.test-data/to-upload/image-01.jpg s3://my-bucket
# UPLOAD - cp dir to s3 dir
# NOTE: By default will skip if exists on s3 (use `--over write` to ovewrite)
ss3 cp ./.test-data/to-upload/ s3://my-bucket -r
# UPLOAD - Check etag (simple etag/md5 only, not multi-part s3 etag)
# NOTE: For now, `--etag` is only implement on upload, not download
ss3 cp ./.test-data/to-upload/ s3://my-bucket -r --over etag --show-skip
# LIST - recursive
ss3 ls s3://my-bucket -r --info
# UPLOAD - rename
ss3 cp ./.test-data/to-upload/image-01.jpg s3://my-bucket/image-01-renamed.jpg
# UPLOAD - excludes
ss3 cp .test-data/to-upload s3://my-bucket -r -e "*.txt" --exclude "*.jpg"
# UPLOAD - includes
ss3 cp .test-data/to-upload s3://my-bucket -r -i "*.txt"
# UPLOAD - cp dir to s3 (recursive)
ss3 cp ./.test-data/to-upload/ s3://my-bucket/ggg -r
# DOWNLOAD - cp s3 file to local dir
ss3 cp s3://my-bucket/image-01.jpg ./.test-data/downloads/
# DOWNLOAD - cp s3 file to local file (rename)
ss3 cp s3://my-bucket/image-01.jpg ./.test-data/downloads/image-01-rename.jpg
# DOWNLOAD - cp s3 folder to local dir
ss3 cp s3://my-bucket/ ./.test-data/downloads/
开发和测试
ss3
集成测试可以通过以下命令运行:cargo test
或cargo nextest run
。
终端1
测试前的先决条件,以如下方式运行minio
docker run --name minio_1 --rm \
-p 9000:9000 \
-p 9900:9900 \
-e "MINIO_ROOT_USER=minio" \
-e "MINIO_ROOT_PASSWORD=miniominio" \
minio/minio server /data --console-address :9900
然后,如果您想进入minio Web控制台,可以访问:http://127.0.0.1:9900/
终端2
然后可以使用以下命令运行测试:cargo test
或cargo nextest run
cargo test
# Or, with nextest
cargo nextest run
# This requires to have installed cargo-nextest: https://nexte.st/book/installation.html
依赖项
~30–41MB
~590K SLoC