2 个稳定版本
1.1.0 | 2019 年 8 月 28 日 |
---|---|
1.0.0 | 2018 年 11 月 4 日 |
#1481 in 文件系统
25KB
386 行
S3 Concat
S3 Concat 是一个用于 AWS S3 中连接文件的轻量级工具。它通过 AWS 提供的 Multipart Upload API 连接文件,从而避免了将文件下载到本地机器的需要。S3 交互由 rusoto_s3 控制,因此请查看相关文档以了解授权实践。
安装
您可以从这个仓库或 Crates(一旦发布)安装 s3-concat
。
# install from Cargo
$ cargo install s3-concat
# install the latest from GitHub
$ cargo install --git https://github.com/whitfin/s3-concat.git
用法
您可以通过遵循 AWS 文档 中的说明来配置凭证,尽管示例将使用环境变量以提高清晰度。
您只需提供源模式和一个目标文件路径即可以基本方式连接文件。
$ AWS_ACCESS_KEY_ID=MY_ACCESS_KEY_ID \
AWS_SECRET_ACCESS_KEY=MY_SECRET_ACCESS_KEY \
AWS_DEFAULT_REGION=us-west-2 \
s3-concat my.bucket.name 'archives/*.gz' 'archive.gz'
如果您正在处理较长的路径,可以在存储桶名称上添加一个前缀,以避免多次输入。在下面的示例中,*.gz
和 archive.gz
是相对于 my/annoyingly/nested/path/
前缀的。
$ AWS_ACCESS_KEY_ID=MY_ACCESS_KEY_ID \
AWS_SECRET_ACCESS_KEY=MY_SECRET_ACCESS_KEY \
AWS_DEFAULT_REGION=us-west-2 \
s3-concat my.bucket.name/my/annoyingly/nested/path/ '*.gz' 'archive.gz'
您还可以使用正则表达式(由官方 regex
Crate 驱动)来在目标路径中使用源路径的部分。以下是一个将日期层次结构(YYYY/MM/DD
)映射到平面结构(YYYY-MM-DD
)的示例。
$ AWS_ACCESS_KEY_ID=MY_ACCESS_KEY_ID \
AWS_SECRET_ACCESS_KEY=MY_SECRET_ACCESS_KEY \
AWS_DEFAULT_REGION=us-west-2 \
s3-concat my.bucket.name 'date-hierachy/(\d{4})/(\d{2})/(\d{2})/*.gz' 'flat-hierarchy/$1-$2-$3.gz'
在这种情况下,所有在2018/01/01/*
目录下的文件都会映射到2018-01-01.gz
。别忘了在你的表达式周围加上单引号,以避免任何讨厌的shell展开!
对于其他任何功能,请查看帮助菜单(尽管下面的示例可能已经过时)
$ s3-concat -h
s3-concat 1.0.0
Isaac Whitfield <[email protected]>
Concatenate Amazon S3 files remotely using flexible patterns
USAGE:
s3-concat [FLAGS] <bucket> <source> <target>
FLAGS:
-c, --cleanup Removes source files after concatenation
-d, --dry-run Only print out the calculated writes
-h, --help Prints help information
-q, --quiet Only prints errors during execution
-V, --version Prints version information
ARGS:
<bucket> An S3 bucket prefix to work within
<source> A source pattern to use to locate files
<target> A target pattern to use to concatenate files into
限制
为了远程连接文件(即不将它们拉到你的机器上),此工具使用了S3的多部分上传API。这意味着该API的所有限制都被此工具继承。通常,这不是问题,但一个更加明显的问题是,小于5MB的文件无法连接。为了避免浪费AWS调用,目前这在客户端层被捕获,并会导致客户端错误。由于解决这个问题比较复杂,目前不支持连接小于5MB的文件。
依赖
~22MB
~397K SLoC