#tar-archive #archive #s3 #tar #amazon-s3 #command-line #local-file

ssstar

一个库crate,用于创建和恢复到/从S3或S3兼容存储的存档。ssstar专门设计用于流式传输输入和输出数据,以使内存使用量最小,同时使用积极的并发性来最大化网络吞吐量。如果您正在寻找命令行(CLI),请参阅 ssstar-cli

15个不稳定版本 (6个重大变更)

0.7.3 2024年3月12日
0.7.1 2023年11月20日
0.6.0 2023年7月19日
0.4.3 2023年3月3日
0.2.0 2022年9月2日

#166 in 文件系统

Download history 2113/week @ 2024-03-24 2814/week @ 2024-03-31 2947/week @ 2024-04-07 1888/week @ 2024-04-14 3007/week @ 2024-04-21 2475/week @ 2024-04-28 945/week @ 2024-05-05 2042/week @ 2024-05-12 1454/week @ 2024-05-19 1906/week @ 2024-05-26 2632/week @ 2024-06-02 2131/week @ 2024-06-09 1558/week @ 2024-06-16 597/week @ 2024-06-23 1362/week @ 2024-06-30 1382/week @ 2024-07-07

5,009 每月下载量
用于 ssstar-cli

Apache-2.0 OR MIT

250KB
3.5K SLoC

ssstar

从S3对象到tar存档以及从tar存档到S3对象的高度并发存档。


这是为 ssstar CLI 提供动力的Rust库crate。如果您正在寻找 ssstar 命令行工具,请参阅 ssstar-cli crate。

要创建包含S3对象的tar存档,实例化一个 CreateArchiveJob

# use ssstar::*;
# #[tokio::main]
# async fn main() -> Result<(), Box<dyn std::error::Error + Sync + Send + 'static>> {
// Write the archive to a local file
let target = TargetArchive::File("test.tar".into());

let mut builder = CreateArchiveJobBuilder::new(Config::default(), target);

// Archive all of the objects in this bucket
builder.add_input(&"s3://my-bucket".parse()?).await?;

let job = builder.build().await?;

job.run_without_progress(futures::future::pending()).await?;

# Ok(())
# }

目标存档可以写入本地文件、S3存储桶或任意的Tokio AsyncWrite 实现。有关详细信息,请参阅 TargetArchive

将tar存档恢复到对象存储同样简单

# use ssstar::*;
# #[tokio::main]
# async fn main() -> Result<(), Box<dyn std::error::Error + Sync + Send + 'static>> {
// Read the archive from a local file
let source = SourceArchive::File("test.tar".into());

// Extract the archive to an S3 bucket, prepending a `foo/` prefix to every file path in
// the archive
let target = "s3://my-bucket/foo/".parse::<url::Url>()?;

let mut builder = ExtractArchiveJobBuilder::new(Config::default(), source, target).await?;

// Extract only text files, in any directory, from the archive
builder.add_filter("**/*.txt")?;

let job = builder.build().await?;

job.run_without_progress(futures::future::pending()).await?;

# Ok(())
# }

依赖关系

~30–42MB
~625K SLoC