#macos #文件 #底层 #zlib #透明 #lzfse #苹果酱

苹果酱核心

使用 macOS 透明压缩进行文件压缩和解压的低级库接口

6 个版本

0.3.2 2024年7月4日
0.3.1 2024年4月15日
0.2.0 2023年6月23日
0.1.1 2023年5月1日
0.1.0 2023年4月6日

#727 in 压缩

Download history 193/week @ 2024-04-13 9/week @ 2024-04-20 10/week @ 2024-05-18 8/week @ 2024-05-25 6/week @ 2024-06-01 8/week @ 2024-06-08 2/week @ 2024-06-15 104/week @ 2024-06-29 58/week @ 2024-07-06 3/week @ 2024-07-13 3/week @ 2024-07-27

84 每月下载量
用于 2 个crate (通过 苹果酱)

GPL-3.0-or-later

59KB
1.5K SLoC

苹果酱

苹果酱是一个用 Rust 编写的命令行界面 (CLI) 程序,用于压缩、解压和打印有关 macOS 上 HFS+/APFS 透明压缩的压缩文件的信息。它基于 afsctool,并提供了几个关键改进,包括更好的性能、改进的多线程(即使是单个文件)和降低的内存使用。苹果酱支持 HFS+/APFS 所使用的所有三种压缩算法:LZFSE、LZVN 和 ZLIB。

安装

通过 Homebrew 安装

要使用 Homebrew 安装苹果酱,请运行以下命令

brew install Dr-Emann/homebrew-tap/applesauce

通过 shell 脚本安装预构建的二进制文件

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/Dr-Emann/applesauce/releases/latest/download/applesauce-cli-installer.sh | sh

使用 Cargo 手动构建

详细信息

要使用 Cargo 安装苹果酱,请按照以下步骤操作

  1. 使用 rust-lang.org 提供的说明安装 Rust 和 Cargo。
  2. 将此存储库克隆到您的本地计算机上。
  3. 在项目目录中,运行 cargo build --release 来构建程序。
  4. 构建的二进制文件可以在 target/release 目录中找到。

用法

要使用苹果酱,请运行以下命令

applesauce [compress|decompress|info] file/directory

选项如下

  • compress:使用三种压缩算法之一(LZFSE、LZVN 或 ZLIB)压缩指定的文件/目录。
  • decompress:解压指定的文件/目录。
  • info:打印有关指定压缩文件/目录的信息,包括压缩比和使用的压缩算法。

例如,要使用 ZLIB 压缩算法压缩名为 example.txt 的文件,请运行

applesauce compress -c ZLIB example.txt

功能

苹果酱具有以下关键功能

  • 支持三种压缩算法:LZFSE、LZVN 和 ZLIB。
  • 可以打印有关压缩文件的信息,包括压缩比和使用的压缩算法。
  • 支持 macOS 上 HFS+/APFS 的透明压缩。

压缩算法

苹果酱支持以下三种压缩算法

  • LZFSE:这是一种由苹果公司开发的压缩算法,用于iOS和macOS。它是一种快速压缩算法,在压缩比和速度之间提供了良好的平衡。
  • LZVN:这也是苹果公司开发的一种压缩算法,用于iOS和macOS。它针对64位处理器进行了优化,并提供了高压缩比。
  • ZLIB:这是一种广泛应用于许多软件包的压缩算法。它的速度比LZFSE和LZVN慢,但可以提供更高的压缩比(特别是使用-l 9时,但并不总是如此:这取决于正在压缩的数据类型)。

Applesauce默认使用LZFSE压缩。根据压缩数据的类型和所需的压缩比与速度之间的平衡,这些算法中的任何一个可能比其他算法更适合。

与Afsctool相比的改进

Applesauce基于afsctool,但提供了几个关键改进,包括

提高性能

afcstool可以并行压缩多个文件,但Applesauce在块级别进行并行处理,因此即使单个文件也可以并行压缩。Applesauce通常比afcstool快几倍,尤其是对于大量的小文件。

减少内存使用

afcstool在压缩文件之前会将整个文件加载到内存中(尽管它尝试使用mmap来处理大文件)。Applesauce只需将当前正在压缩的块(s)保留在内存中。

更好的用户界面

当Applesauce工作时,会输出一个漂亮的进度条,提供比afcstool的稀疏输出更友好的用户体验。

更好地处理大量小文件

afcstool会压缩压缩后适合xattr的文件,即使这样做实际上会增加比保持文件未压缩更多的开销。如果Applesauce压缩文件会导致文件更大,则不会压缩文件。

更好的错误处理

afcstool会就地覆盖文件。尽管它会尝试在发生错误时恢复文件,但如果在压缩文件时被强制终止,文件可能处于无效状态。

Applesauce将文件压缩/解压缩到临时文件,然后仅在操作完成后将临时文件原子性地重命名为原始文件:文件永远不会处于无效状态,即使程序被强行终止。

这不是备份的替代品:请勿在无法承受丢失的文件上使用Applesauce。

许可证

Applesauce遵循GNU通用公共许可证版本3(GPLv3)。

贡献

欢迎对Applesauce做出贡献!如果您想贡献代码,请打开GitHub存储库的拉取请求。如果您发现错误或提出功能请求,请在该存储库上打开一个问题。

依赖关系

~0.4–0.8MB
~13K SLoC