用法
四个命令 — 其他都是选项。
看归档内容:lha l archive.lzh
最常用的操作。列出归档内每个成员的大小、压缩率、时间戳:
$ lha l README.lzh
PERM UID GID SIZE RATIO STAMP NAME
[generic] 1234 60.0% Jul 14 20:30 README.md
[generic] 5678 72.5% Jul 14 20:30 src/main.c
---------- -------------------- ------- ----------
2 files, 6912 bytes (62.5%)
加 v 出详情(路径权限 + CRC):
$ lha lv README.lzh
两个 v 是超详细(每块信息):
$ lha lvv README.lzh
解压:lha x archive.lzh
默认解压模式。文件按归档里的相对路径写到当前目录:
$ lha x archive.lzh
常用选项:
q(安静):lha xq archive.lzhw=DIR(写到 DIR,自动 mkdir):lha xw=output archive.lzhf(强制覆盖,不问):lha xf archive.lzhi(忽略目录条目,把所有文件平铺到当前目录):lha xi archive.lzh
glob 过滤:
$ lha x archive.lzh "*.c" # 只解 *.c
$ lha x archive.lzh src/* # 只解 src/ 下
CRC 校验:lha t archive.lzh
遍历整个归档,重算每个成员的 CRC16,和归档头里写的对一遍。退出码 0 = 全过;非 0 = 有成员 CRC 不对(归档坏了或者没下完)。
$ lha t README.lzh
test README.lzh : OK
在 CI 里这个很管用——从上游 mirror 拉完 .lzh 之后
lha t 一下再解。
打印到标准输出:lha p archive.lzh file
把归档里单个成员输出到 stdout(已解压)。等价
tar -xOf archive.lzh file:
$ lha p README.lzh src/main.c | head -5
/* main.c — entry point */
不加成员过滤则按顺序打印全部成员,方便管道:
$ lha p archive.lzh | grep TODO
lhasa 不做什么
- 不写新
.lzh归档。要写就只能用原版 jca02266/lha (LHa for UNIX 1.14i)自己 build 的lha。 - 不写新
.lzs或.pma。同上——lhasa 故意只做 decode,encoder 是另一个历史问题。
读(2026 年的 99% 用例)用 lhasa 就够了。