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压缩

Download history 251/week @ 2024-03-13 275/week @ 2024-03-20 160/week @ 2024-03-27 27/week @ 2024-04-03 48/week @ 2024-04-10 13/week @ 2024-04-17 98/week @ 2024-04-24 61/week @ 2024-05-01 26/week @ 2024-05-08 14/week @ 2024-05-15 21/week @ 2024-05-22 10/week @ 2024-05-29 38/week @ 2024-06-05 73/week @ 2024-06-12 107/week @ 2024-06-19 50/week @ 2024-06-26

每月下载 271 次
2 crates 中使用

Apache-2.0

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

解压

github crates.io docs.rs build status

一个支持多种格式归档解压的库,受 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(),
);

版权

版权 (c) 2022 @jondot. 有关详细信息,请参阅 LICENSE

依赖关系

~4–15MB
~197K SLoC