#filesystem #macos #zlib #command-line #apple #afsc

applesauce

用于压缩支持苹果文件系统压缩的文件的工具

12 个不稳定版本 (4 个破坏性更新)

0.5.4 2024年7月4日
0.5.3 2024年4月16日
0.4.0 2024年4月9日
0.3.0 2023年6月23日
0.1.5 2023年3月6日

#107 in 压缩


用于 applesauce-cli

GPL-3.0-or-later

165KB
4K SLoC

苹果酱

苹果酱是一个用 Rust 编写的命令行界面 (CLI) 程序,用于压缩、解压缩以及打印关于压缩文件的 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:此压缩算法由 Apple 为 iOS 和 macOS 开发。它是一种快速的压缩算法,在压缩比和速度之间提供了良好的平衡。
  • lzvn:这种压缩算法也是苹果公司为iOS和macOS开发的。它针对64位处理器进行了优化,并提供高压缩率。
  • zlib:这是一个广泛使用的压缩算法,被许多软件包实现。它的速度比LZFSE和LZVN慢,但可以提供更高的压缩率(尤其是在使用-l 9时,但这并不总是如此:这取决于压缩的数据类型)。

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

与Afsctool的改进

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

改进性能

afcstool可以并行压缩多个文件,但Applesauce在块级别并行化,因此即使是单个文件也可以并行压缩。Applesauce通常比afcstool快几倍,尤其是在压缩少量大文件时。

减少内存使用

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

更好的用户界面

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

处理大量小文件时的更好压缩

afcstool会压缩压缩后可以放入xattr的文件,即使这样做实际上会增加比不压缩更多的开销。如果Applesauce压缩文件会导致文件变大,它将不会压缩该文件。

更好的错误处理

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

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

这不能替代备份:请不要在无法承担丢失文件的文件上使用Applesauce。

许可证

Applesauce在GNU通用公共许可证版本3(GPLv3)下授权。

贡献

欢迎为Applesauce做出贡献!如果您想贡献代码,请在该GitHub仓库上提交拉取请求。如果您发现错误或有任何功能请求,请在该仓库上创建一个问题。

依赖项

~4–13MB
~157K SLoC