Skip to main content

Command documentation sourced from the linux-command project This comprehensive command reference is part of the linux-command documentation project.

lha - LHA/LZH压缩归档工具

概述

lha 是一个功能强大的压缩归档工具,用于处理 LHA(.lzh)格式的压缩文件。该工具由 Haruyasu Yoshizaki 开发,在 1990 年代和 2000 年代初期在日本非常流行,类似于 ZIP 格式的压缩工具。LHA 提供了优秀的压缩率和良好的兼容性,特别适用于处理日文系统环境下的压缩文件。

基本语法

lha [OPTIONS] OPERATION ARCHIVE_FILE [FILES...]

语法结构说明

  • OPERATION: 执行的操作类型(添加、提取、删除等)
  • ARCHIVE_FILE: 目标归档文件名(通常以 .lzh 或 .lha 为扩展名)
  • FILES: 要处理的文件或目录列表

完整选项参考

基本操作选项

选项长选项描述示例
-a--add添加文件到归档lha a archive.lzh file.txt
-x--extract提取文件从归档lha x archive.lzh
-e--extract提取文件(同 -x)lha e archive.lzh
-d--delete从归档中删除文件lha d archive.lzh old.txt
-t--test测试归档完整性lha t archive.lzh
-v--verbose详细输出模式lha v archive.lzh
-l--list列出归档内容lha l archive.lzh

压缩控制选项

选项描述取值范围默认值
-1-9压缩级别1=最快,9=最佳压缩5
-M压缩方法选择0-7 不同算法5
-m移动模式(添加后删除原文件)--

处理选项

选项长选项描述示例
-r--recursive递归处理目录lha ar archive.lzh dir/
-f--force强制覆盖现有文件lha xf archive.lzh
-c--create创建新归档lha ca archive.lzh files/
-p--preserve保持文件权限lha ap archive.lzh files/
-o--output指定输出目录lha x -o /tmp archive.lzh
-g--grep在归档中搜索文件lha g pattern archive.lzh
-q--quiet静默模式lha q archive.lzh

高级选项

选项描述用途
-n不压缩,仅归档适用于已压缩文件
-z使用 compress 压缩兼容性模式
-s使用 solid 压缩提高多文件压缩率
-u更新模式(仅新文件)增量备份
-w备份模式保留旧版本文件

使用示例

基本操作示例

1. 创建压缩归档

# 创建基本压缩归档
lha a documents.lzh report.txt memo.doc

# 使用最高压缩级别
lha a9 archive.lzh source_code/

# 递归压缩整个目录
lha ar backup.lzh /home/user/documents/

# 移动模式(压缩后删除原文件)
lha am temp.lzh temporary_files/

2. 提取操作

# 提取所有文件
lha x documents.lzh

# 提取到指定目录
lha x -o /home/user/extracted/ documents.lzh

# 详细模式提取
lha xv documents.lzh

# 强制覆盖现有文件
lha xf documents.lzh

# 提取特定文件
lha x documents.lzh report.txt

3. 查看和测试

# 列出归档内容
lha l documents.lzh
lha v documents.lzh # 详细列表

# 测试归档完整性
lha t documents.lzh

# 静默模式测试
lha tq documents.lzh

# 在归档中搜索文件
lha g "*.txt" documents.lzh

4. 维护操作

# 删除归档中的文件
lha d documents.lzh old_report.txt

# 添加文件到现有归档
lha a documents.lzh new_file.pdf

# 更新归档(仅新文件)
lha au documents.lzh /home/user/new_docs/

# 使用 solid 压缩重新打包
lha as9 documents_solid.lzh files/

实际应用场景

1. 系统备份场景

#!/bin/bash
# 每日备份脚本

BACKUP_DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup"
SOURCE_DIR="/home/user/important_data"

# 创建带时间戳的备份归档
lha ar9 "$BACKUP_DIR/daily_backup_$BACKUP_DATE.lzh" "$SOURCE_DIR"

# 验证备份完整性
if lha t "$BACKUP_DIR/daily_backup_$BACKUP_DATE.lzh"; then
echo "备份验证成功"
# 清理超过7天的旧备份
find "$BACKUP_DIR" -name "daily_backup_*.lzh" -mtime +7 -delete
else
echo "备份验证失败,请检查"
exit 1
fi

2. 文件传输压缩

#!/bin/bash
# 网络传输前的压缩优化

PROJECT_DIR="./project"
OUTPUT_DIR="./compressed"

# 创建输出目录
mkdir -p "$OUTPUT_DIR"

# 分类压缩不同类型的文件
lha a5 "$OUTPUT_DIR/docs.lzh" "$PROJECT_DIR"/*.pdf "$PROJECT_DIR"/*.doc
lha a9 "$OUTPUT_DIR/code.lzh" "$PROJECT_DIR"/src/
lha a7 "$OUTPUT_DIR/images.lzh" "$PROJECT_DIR"/images/

# 显示压缩统计
echo "压缩完成:"
for file in "$OUTPUT_DIR"/*.lzh; do
size=$(stat -f%z "$file" 2>/dev/null || stat -c%s "$file")
echo "$(basename "$file"): $size bytes"
done

3. 软件分发归档

#!/bin/bash
# 创建软件发布包

VERSION="1.2.3"
APP_NAME="myapp"
RELEASE_DIR="release"

# 清理并创建发布目录
rm -rf "$RELEASE_DIR"
mkdir -p "$RELEASE_DIR"

# 复制必要文件
cp -r src/ "$RELEASE_DIR/"
cp README.md "$RELEASE_DIR/"
cp LICENSE "$RELEASE_DIR/"

# 创建安装脚本
cat > "$RELEASE_DIR/install.sh" << 'EOF'
#!/bin/bash
echo "安装应用程序..."
lha x package.lzh
echo "安装完成"
EOF
chmod +x "$RELEASE_DIR/install.sh"

# 创建发布包
cd "$RELEASE_DIR"
lha ar9 "../${APP_NAME}-${VERSION}.lzh" *
cd ..

echo "发布包 ${APP_NAME}-${VERSION}.lzh 创建完成"

高级技术

1. 批量处理脚本

#!/bin/bash
# 批量压缩管理工具

COMPRESS_DIR="./compress"
DECOMPRESS_DIR="./decompress"
LOG_FILE="./lha_operations.log"

# 日志函数
log_operation() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}

# 批量压缩函数
batch_compress() {
local source_dir="$1"
local pattern="$2"
local output_prefix="$3"

find "$source_dir" -name "$pattern" -print0 | while IFS= read -r -d '' file; do
local relative_path="${file#$source_dir/}"
local dir_path=$(dirname "$relative_path")
local base_name=$(basename "$file" "${file##*.}")
local archive_name="${output_prefix}_${base_name}.lzh"

mkdir -p "$(dirname "$archive_name")"

if lha a9 "$archive_name" "$file"; then
log_operation "压缩成功: $file -> $archive_name"
# 可选:删除原文件
# rm "$file"
else
log_operation "压缩失败: $file"
fi
done
}

# 批量解压函数
batch_decompress() {
local archive_dir="$1"
local target_dir="$2"

find "$archive_dir" -name "*.lzh" -print0 | while IFS= read -r -d '' archive; do
local archive_name=$(basename "$archive" .lzh)
local extract_dir="$target_dir/$archive_name"

mkdir -p "$extract_dir"

if lha x -o "$extract_dir" "$archive"; then
log_operation "解压成功: $archive -> $extract_dir"
else
log_operation "解压失败: $archive"
fi
done
}

# 使用示例
batch_compress "./source" "*.txt" "text_backup"
batch_decompress "./archives" "./extracted"

2. 压缩性能监控

#!/bin/bash
# LHA 压缩性能监控工具

MONITOR_DIR="./monitor"
REPORT_FILE="./compression_report.txt"
TEMP_DIR="./temp_compress"

# 初始化报告
echo "LHA 压缩性能报告" > "$REPORT_FILE"
echo "生成时间: $(date)" >> "$REPORT_FILE"
echo "=========================" >> "$REPORT_FILE"

# 性能测试函数
test_compression_performance() {
local test_file="$1"
local levels=(1 5 9)
local methods=(0 5 7)

echo "测试文件: $test_file" >> "$REPORT_FILE"
echo "原始大小: $(stat -c%s "$test_file") bytes" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"

for level in "${levels[@]}"; do
echo "压缩级别 $level:" >> "$REPORT_FILE"

for method in "${methods[@]}"; do
local archive="$TEMP_DIR/test_l${level}_m${method}.lzh"
local start_time=$(date +%s.%N)

if lha -a${level} -M${method} "$archive" "$test_file" 2>/dev/null; then
local end_time=$(date +%s.%N)
local duration=$(echo "$end_time - $start_time" | bc)
local compressed_size=$(stat -c%s "$archive")
local ratio=$(echo "scale=2; $compressed_size / $(stat -c%s "$test_file") * 100" | bc)

printf " 方法 %2d: 大小 %8d bytes, 压缩率 %5.1f%%, 耗时 %6.2fs\n" \
"$method" "$compressed_size" "$ratio" "$duration" >> "$REPORT_FILE"
fi
done
echo "" >> "$REPORT_FILE"
done
echo "" >> "$REPORT_FILE"
}

# 创建临时目录
mkdir -p "$TEMP_DIR"

# 测试不同类型的文件
for file in "$MONITOR_DIR"/*; do
if [ -f "$file" ]; then
test_compression_performance "$file"
fi
done

# 清理临时文件
rm -rf "$TEMP_DIR"

echo "性能测试完成,报告已保存到: $REPORT_FILE"

3. 智能备份管理

#!/bin/bash
# 智能 LHA 备份管理系统

CONFIG_FILE="backup_config.conf"
BACKUP_ROOT="/backup"
LOG_FILE="/var/log/lha_backup.log"

# 默认配置
DEFAULT_RETENTION_DAYS=30
DEFAULT_COMPRESSION_LEVEL=9
DEFAULT_MAX_ARCHIVE_SIZE="1G"

# 加载配置
if [ -f "$CONFIG_FILE" ]; then
source "$CONFIG_FILE"
fi

# 日志函数
backup_log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# 检查磁盘空间
check_disk_space() {
local required="$1"
local available=$(df -BG "$BACKUP_ROOT" | awk 'NR==2 {print $4}' | sed 's/G//')

if [ "$available" -lt 2 ]; then
backup_log "警告: 磁盘空间不足 (可用: ${available}G)"
return 1
fi
return 0
}

# 创建增量备份
create_incremental_backup() {
local source="$1"
local backup_name="$2"
local base_archive="$3"

local temp_dir=$(mktemp -d)
local timestamp=$(date +%Y%m%d_%H%M%S)
local archive="$BACKUP_ROOT/${backup_name}_${timestamp}.lzh"

if [ -n "$base_archive" ] && [ -f "$base_archive" ]; then
# 基于基础归档创建增量
backup_log "创建增量备份: $archive"

# 提取基础归档
lha x -o "$temp_dir/base" "$base_archive"

# 找出新增或修改的文件
find "$source" -newer "$base_archive" -print0 > "$temp_dir/new_files.list"

# 压缩新增文件
if [ -s "$temp_dir/new_files.list" ]; then
cd "$source"
xargs -0 lha a${DEFAULT_COMPRESSION_LEVEL} "$archive" < "$temp_dir/new_files.list"
else
backup_log "没有新增文件,跳过备份"
rm -rf "$temp_dir"
return 0
fi
else
# 创建完整备份
backup_log "创建完整备份: $archive"
lha ar${DEFAULT_COMPRESSION_LEVEL} "$archive" "$source"
fi

# 验证备份
if lha t "$archive"; then
backup_log "备份验证成功: $archive"
# 创建校验和
sha256sum "$archive" > "${archive}.sha256"
else
backup_log "备份验证失败: $archive"
rm -f "$archive"
return 1
fi

rm -rf "$temp_dir"
return 0
}

# 清理旧备份
cleanup_old_backups() {
local pattern="$1"
local retention_days="${2:-$DEFAULT_RETENTION_DAYS}"

backup_log "清理 $retention_days 天前的备份: $pattern"

find "$BACKUP_ROOT" -name "$pattern" -mtime +$retention_days -print0 | while IFS= read -r -d '' archive; do
backup_log "删除旧备份: $archive"
rm -f "$archive" "${archive}.sha256"
done
}

# 主函数
main() {
local backup_source="$1"
local backup_name="$2"

if [ -z "$backup_source" ] || [ -z "$backup_name" ]; then
echo "用法: $0 <源目录> <备份名称>"
exit 1
fi

if [ ! -d "$backup_source" ]; then
echo "错误: 源目录不存在: $backup_source"
exit 1
fi

# 检查磁盘空间
if ! check_disk_space; then
echo "错误: 磁盘空间不足"
exit 1
fi

# 创建备份目录
mkdir -p "$BACKUP_ROOT"

# 查找最新的基础归档
local base_archive=$(find "$BACKUP_ROOT" -name "${backup_name}_*.lzh" -type f | sort -r | head -n1)

# 执行备份
if create_incremental_backup "$backup_source" "$backup_name" "$base_archive"; then
# 清理旧备份
cleanup_old_backups "${backup_name}_*.lzh"
backup_log "备份任务完成"
else
backup_log "备份任务失败"
exit 1
fi
}

# 使用示例
main "$@"

故障排除指南

常见问题及解决方案

1. 归档损坏问题

症状:

$ lha t archive.lzh
lha: archive.lzh: bad archive format

解决方案:

# 尝试修复归档(如果可能)
lha -f x archive.lzh /tmp/repair_test/

# 使用详细模式查看损坏位置
lha vv archive.lzh 2>&1 | head -20

# 如果修复失败,尝试部分提取
lha x -k archive.lzh # 跳过损坏的文件

2. 权限问题

症状:

$ lha x archive.lzh
lha: cannot create file: Permission denied

解决方案:

# 检查目标目录权限
ls -la /target/directory/

# 使用 sudo 提取(如果需要)
sudo lha x -o /target/directory archive.lzh

# 提取到临时目录再移动
lha x -o /tmp/ archive.lzh
sudo mv /tmp/extracted_files/* /target/directory/

3. 磁盘空间不足

症状:

$ lha a9 large_archive.lzh /huge/directory/
lha: No space left on device

解决方案:

# 检查可用空间
df -h .

# 使用较低的压缩级别以减少临时空间需求
lha a5 large_archive.lzh /huge/directory/

# 分批处理大文件
find /huge/directory/ -type f -print0 | split -d -l 1000 - /tmp/file_batch_
for batch in /tmp/file_batch_*; do
lha a9 "archive_part_$(basename $batch).lzh" --files-from="$batch"
done

4. 编码问题

症状:

$ lha l japanese_archive.lzh
?????????.txt 1234 2023-01-01

解决方案:

# 使用适当的语言设置
LANG=ja_JP.UTF-8 lha l japanese_archive.lzh

# 或者在脚本中设置
export LC_ALL=ja_JP.UTF-8
lha x japanese_archive.lzh

# 查看支持的编码
locale -a | grep -i ja

5. 性能问题

症状: 压缩或解压速度过慢

解决方案:

# 使用较低的压缩级别
lha a1 archive.lzh large_files/ # 最快速度
lha a5 archive.lzh large_files/ # 平衡模式

# 使用多核心优化(如果支持)
lha a9 archive.lzh large_files/ --threads=4

# 排除不必要的文件
lha a9 archive.lzh large_files/ --exclude="*.tmp" --exclude="*.log"

调试技巧

1. 详细日志输出

# 使用最详细的输出模式
lha -vvv operation archive.lzh

# 将输出重定向到日志文件
lha -vv x archive.lzh 2>&1 | tee lha_debug.log

# 使用 strace 追踪系统调用(Linux)
strace -o lha_trace.log lha x archive.lzh

2. 归档完整性检查

#!/bin/bash
# 完整的归档验证脚本

archive="$1"

if [ ! -f "$archive" ]; then
echo "错误: 归档文件不存在: $archive"
exit 1
fi

echo "验证归档: $archive"
echo "=================="

# 1. 基本格式检查
echo "1. 检查归档格式..."
file "$archive"

# 2. 完整性测试
echo "2. 测试归档完整性..."
if lha t "$archive"; then
echo " ✓ 完整性测试通过"
else
echo " ✗ 完整性测试失败"
exit 1
fi

# 3. 内容列表
echo "3. 归档内容列表:"
lha l "$archive" | nl

# 4. 文件大小统计
echo "4. 文件大小统计:"
total_size=0
lha l "$archive" | awk '{print $1}' | grep -E '^[0-9]+$' | {
while read size; do
total_size=$((total_size + size))
done
echo " 总大小: $total_size bytes ($(($total_size / 1024)) KB)"
}

echo "验证完成"

3. 性能分析脚本

#!/bin/bash
# LHA 操作性能分析

analyze_performance() {
local operation="$1"
local archive="$2"
local files="$3"

echo "性能分析: $operation"
echo "=================="

# 系统信息
echo "系统信息:"
echo " CPU: $(grep 'model name' /proc/cpuinfo | head -1 | cut -d: -f2 | xargs)"
echo " 内存: $(free -h | grep '^Mem:' | awk '{print $2}')"
echo " 磁盘: $(df -h . | tail -1 | awk '{print $4}') 可用"
echo ""

# 执行操作并测量
echo "执行 $operation..."
start_time=$(date +%s.%N)
start_cpu=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | sed 's/%us,//')

case "$operation" in
"compress")
lha a9 "$archive" $files
;;
"extract")
lha x "$archive"
;;
"test")
lha t "$archive"
;;
esac

end_time=$(date +%s.%N)
end_cpu=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | sed 's/%us,//')

# 计算结果
duration=$(echo "$end_time - $start_time" | bc)
cpu_usage=$(echo "scale=1; ($end_cpu + $start_cpu) / 2" | bc)

echo "性能结果:"
printf " 耗时: %.2f 秒\n" "$duration"
printf " CPU使用: %.1f%%\n" "$cpu_usage"

if [ "$operation" = "compress" ]; then
if [ -f "$archive" ]; then
archive_size=$(stat -c%s "$archive")
source_size=$(du -sb $files 2>/dev/null | awk '{sum+=$1} END {print sum}')
ratio=$(echo "scale=1; $archive_size / $source_size * 100" | bc)
printf " 压缩率: %.1f%%\n" "$ratio"
printf " 节省空间: %d bytes\n" $((source_size - archive_size))
fi
fi
}

# 使用示例
# analyze_performance "compress" "test.lzh" "test_files/"

相关命令链接

压缩工具对比

命令格式压缩率速度特点
lha.lzh/.lha中等日文系统兼容性好
gzip.gz中等很快Unix 标准
bzip2.bz2中等压缩率优秀
xz.xz很高最佳压缩率
zip.zip中等跨平台兼容
7z.7z很高中等功能最全

文件管理相关命令

  • tar - 磁带归档工具,可与 lha 结合使用
  • cpio - 另一种归档格式
  • ar - 静态库归档工具
  • pax - POSIX 归档工具

系统工具

  • file - 文件类型识别,用于验证归档格式
  • stat - 文件状态信息,用于压缩统计
  • find - 文件查找,用于批量处理
  • du - 磁盘使用量,用于压缩效果评估

最佳实践

1. 压缩策略选择

# 根据文件类型选择压缩级别
case "$file_type" in
"text"|"documents")
lha a9 archive.lzh files/ # 文本文件使用最高压缩
;;
"images"|"video")
lha a1 archive.lzh files/ # 已压缩文件使用最快模式
;;
"source_code")
lha a7 archive.lzh files/ # 源代码使用高压缩
;;
"log_files")
lha a5 archive.lzh files/ # 日志文件使用平衡压缩
;;
esac

2. 归档管理

#!/bin/bash
# 推荐的归档命名规范

create_standard_archive() {
local content="$1"
local name="$2"
local version="$3"

# 标准命名: name_version_YYYYMMDD.lzh
local timestamp=$(date +%Y%m%d)
local archive_name="${name}_${version}_${timestamp}.lzh"

# 创建归档
lha ar9 "$archive_name" "$content"

# 创建元数据文件
cat > "${archive_name}.meta" << EOF
Archive: $archive_name
Created: $(date)
Version: $version
Contents: $content
Checksum: $(sha256sum "$archive_name")
EOF

echo "标准归档创建完成: $archive_name"
}

3. 自动化工作流

#!/bin/bash
# LHA 自动化处理工作流

setup_lha_environment() {
# 设置环境变量
export LHA_OPT="-v" # 默认详细输出
export BACKUP_DIR="/backup"
export TEMP_DIR="/tmp/lha_work"

# 创建工作目录
mkdir -p "$BACKUP_DIR" "$TEMP_DIR"

# 设置日志
exec 1> >(tee -a "/var/log/lha_workflow.log")
exec 2> >(tee -a "/var/log/lha_error.log")
}

process_workflow() {
local input_dir="$1"
local workflow_type="$2"

case "$workflow_type" in
"daily_backup")
daily_backup_workflow "$input_dir"
;;
"archive_rotation")
archive_rotation_workflow "$input_dir"
;;
"compression_audit")
compression_audit_workflow "$input_dir"
;;
*)
echo "未知工作流类型: $workflow_type"
exit 1
;;
esac
}

daily_backup_workflow() {
local source="$1"
local backup_name="daily_$(basename $source)"
local timestamp=$(date +%Y%m%d)

echo "开始每日备份工作流..."

# 1. 预检查
if [ ! -d "$source" ]; then
echo "错误: 源目录不存在"
exit 1
fi

# 2. 执行备份
lha ar9 "$BACKUP_DIR/${backup_name}_${timestamp}.lzh" "$source"

# 3. 验证备份
local archive="$BACKUP_DIR/${backup_name}_${timestamp}.lzh"
if lha t "$archive"; then
echo "备份验证成功"

# 4. 更新备份索引
echo "$archive $(date)" >> "$BACKUP_DIR/backup_index.txt"
else
echo "备份验证失败"
exit 1
fi
}

4. 安全性考虑

#!/bin/bash
# LHA 安全压缩指南

secure_archive_create() {
local source="$1"
local archive="$2"
local password="$3"

# 1. 设置安全权限
umask 077

# 2. 创建临时工作目录
local temp_work=$(mktemp -d)
chmod 700 "$temp_work"

# 3. 复制文件到临时目录
cp -r "$source" "$temp_work/"

# 4. 设置文件权限(如果需要)
find "$temp_work" -type f -exec chmod 600 {} \;
find "$temp_work" -type d -exec chmod 700 {} \;

# 5. 创建归档
lha ar9 "$archive" "$temp_work"/*

# 6. 加密归档(如果提供了密码)
if [ -n "$password" ]; then
openssl enc -aes-256-cbc -salt -in "$archive" -out "${archive}.enc" -pass pass:"$password"
mv "${archive}.enc" "$archive"
fi

# 7. 清理临时目录
rm -rf "$temp_work"

# 8. 设置归档权限
chmod 600 "$archive"

echo "安全归档创建完成: $archive"
}

secure_archive_extract() {
local archive="$1"
local target_dir="$2"
local password="$3"

# 1. 创建安全的目标目录
mkdir -p "$target_dir"
chmod 700 "$target_dir"

# 2. 解密归档(如果需要)
local temp_archive="$archive"
if [ -n "$password" ]; then
temp_archive=$(mktemp)
openssl enc -d -aes-256-cbc -in "$archive" -out "$temp_archive" -pass pass:"$password"
fi

# 3. 提取归档
lha x -o "$target_dir" "$temp_archive"

# 4. 清理临时文件
[ -n "$password" ] && rm -f "$temp_archive"

# 5. 设置适当的文件权限
find "$target_dir" -type f -exec chmod 600 {} \;
find "$target_dir" -type d -exec chmod 700 {} \;

echo "安全归档提取完成: $target_dir"
}

性能优化技巧

1. 系统级优化

# 设置大文件处理限制
echo '* soft nofile 65536' >> /etc/security/limits.conf
echo '* hard nofile 65536' >> /etc/security/limits.conf

# 调整内核参数
echo 'vm.vfs_cache_pressure=50' >> /etc/sysctl.conf
echo 'vm.dirty_ratio=15' >> /etc/sysctl.conf

# 应用设置
sysctl -p

2. 批处理优化

#!/bin/bash
# 高效批处理脚本

optimized_batch_compress() {
local source_dir="$1"
local parallel_jobs="${2:-4}"

# 使用 GNU parallel 并行处理
find "$source_dir" -type f -print0 | \
parallel -0 -j "$parallel_jobs" \
'lha a9 "{.}.lzh" "{}" && echo "压缩完成: {}"'

# 或者使用 xargs(如果没有 parallel)
find "$source_dir" -type f -print0 | \
xargs -0 -P "$parallel_jobs" -I {} \
bash -c 'lha a9 "$1.lzh" "$1" && echo "压缩完成: $1"' _ {}
}

3. 内存使用优化

#!/bin/bash
# 内存优化的 LHA 操作

memory_optimized_compress() {
local source="$1"
local archive="$2"
local max_memory="${3:-512M}"

# 限制内存使用
ulimit -v $(echo "$max_memory" | sed 's/M/*1024*1024/' | bc)

# 分块处理大目录
local temp_dir=$(mktemp -d)
local chunk_size=1000

find "$source" -type f | split -d -l "$chunk_size" - "$temp_dir/chunk_"

for chunk_file in "$temp_dir"/chunk_*; do
local chunk_archive="${archive}_$(basename $chunk_file).lzh"
lha a5 "$chunk_archive" --files-from="$chunk_file"

# 清理内存
sync
echo 3 > /proc/sys/vm/drop_caches
done

# 合并所有分块
lha a "$archive" "$temp_dir"/*.lzh
rm -rf "$temp_dir"
}

通过以上详细的指南和示例,您可以充分利用 lha 命令的功能,实现高效的文件压缩和管理。LHA 虽然是一个较老的压缩格式,但在特定场景下仍然具有其独特的价值,特别是在处理日文系统和遗留数据时。