16个不稳定版本 (4个破坏性更新)
0.5.4 | 2024年7月4日 |
---|---|
0.5.3 | 2024年4月16日 |
0.4.6 | 2024年4月10日 |
0.3.0 | 2023年6月23日 |
0.1.5 | 2023年3月6日 |
#277 in 压缩
188 每月下载量
125KB
3K 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安装苹果酱,请按照以下步骤操作
- 按照rust-lang.org提供的说明安装Rust和Cargo。
- 将此仓库克隆到您的本地计算机上。
- 在项目目录中,运行
cargo build --release
以构建程序。 - 构建的二进制文件可以在
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只会将当前正在压缩的块保留在内存中。
更好的用户界面
Applesauce在运行时会输出一个美观的进度条,提供比afsctool的稀疏输出更友好的用户体验。
处理大量小文件的压缩效果更好
afcstool会压缩压缩后适合放入xattr的文件,即使这样做实际上会增加更多开销,即使留下文件未压缩更合适。Applesauce不会压缩如果这样做会导致文件更大的文件。
更好的错误处理
afcstool会原地覆盖文件。尽管它在发生错误时试图恢复文件,但如果在压缩文件时被强制终止,文件可能会处于无效状态。
Applesauce将文件压缩/解压缩到临时文件,然后在操作完成后以原子方式将临时文件重命名为原始文件:文件永远不会处于无效状态,即使程序被强制终止。
这不能替代备份:请勿在无法承受丢失的文件上使用Applesauce。
许可证
Applesauce遵循GNU通用公共许可证版本3(GPLv3)。
贡献
欢迎对Applesauce做出贡献!如果您想贡献代码,请在GitHub仓库上打开一个pull request。如果您发现错误或有功能请求,请在仓库上打开一个issue。
依赖项
~14–25MB
~372K SLoC