6 个版本 (破坏性)
0.6.0 | 2023年2月27日 |
---|---|
0.5.0 | 2023年2月27日 |
0.4.0 | 2023年2月27日 |
0.3.0 | 2023年1月21日 |
0.1.0 | 2022年11月28日 |
#439 在 压缩
每月下载 271 次
在 2 crates 中使用
48KB
1K SLoC
包含 (ar 库, 34KB) tests/fixtures/bare_ar, (Mach-o 可执行文件, 34KB) tests/expected/bare_ar/a.out, (Mach-o 可执行文件, 34KB) tests/expected/content_bare_ar/a.out, (ar 库, 34KB) tests/fixtures/bare.ar, (Zip 文件, 1KB) tests/fixtures/bare_zip
解压
一个支持多种格式归档解压的库,受 Node 的 decompress 的人体工程学启发。
- 包括一组默认的解压器,支持:
zip
,tar
,tar.gz
,tar.bz2
,tar.xz
,tar.zst
(zstd 压缩),ar
(Unix 归档) - 构建自己的解压器并添加它们
- 组合自定义堆栈(排除压缩器,针对不同的文件扩展名进行响应)
- 使用
cargo
功能以避免编译不需要的格式
依赖关系
[dependencies]
decompress = "0.1.0"
用法
默认用法
decompress::decompress(archive, to, &ExtractOpts::default());
删除归档中所有路径的第一个组件(当你有一个不需要的包装文件夹时)
decompress::decompress(archive, to, &ExtractOpts{ strip: 1 });
一个微观优化
let decompressor = decompress::Decompress::default()
// use decompressor
// decompressor.decompress(...)
构建自己的堆栈
use regex::Regex;
let decompressor = decompress::Decompress::build(vec![decompressors::zip::Zip::build(Some(
Regex::new(r".*").unwrap(),
))]);
// use decompressor
// decompressor.decompress(...)
还可以过滤不需要的文件,类似于 nodejs decompress
let decompressor = decompress::Decompress::default();
let res = decompressor.decompress(
archive,
to,
&ExtractOptsBuilder::default()
.strip(strip)
.filter(|path| {
if let Some(path) = path.to_str() {
return path.ends_with("abc.sh");
}
false
})
.build()
.unwrap(),
);
支持路径映射
let decompressor = decompress::Decompress::default();
let res = decompressor.decompress(
archive,
to,
&ExtractOptsBuilder::default()
.strip(strip)
.map(|path| {
let mut path = path.to_path_buf();
path.set_file_name(format!(
"abc-{}",
path.file_name().unwrap().to_str().unwrap()
));
path.into()
})
.build()
.unwrap(),
);
版权
依赖关系
~4–15MB
~197K SLoC