unarj在大多数Linux发行版中默认不安装,需要手动安装:
sudo apt install unarjsudo yum install unarjsudo dnf install unarjsudo pacman -S unarjunarj [选项] 压缩文件 [文件名...]
| 参数 | 说明 |
|---|---|
| e | 解压文件到当前目录(不带路径) |
| x | 解压文件并保留目录结构 |
| l | 列出压缩文件内容 |
| t | 测试压缩文件完整性 |
| v | 详细列出压缩文件内容 |
| p | 解压文件到标准输出 |
| d | 删除压缩包中的文件 |
| y | 对所有询问回答"是" |
| -? | 显示帮助信息 |
| -jm | 最大压缩模式 |
| -jt | 测试临时文件 |
| -jp | 显示完整路径 |
| -jv | 显示详细列表 |
| -jx | 从指定位置开始解压 |
# 解压ARJ文件到当前目录(不保留路径)
unarj e archive.arj
# 解压ARJ文件并保留目录结构
unarj x archive.arj
# 解压特定文件
unarj e archive.arj file.txt
# 解压多个特定文件
unarj e archive.arj file1.txt file2.txt file3.txt
# 使用绝对路径解压
unarj e /path/to/archive.arj
# 列出压缩包内容
unarj l archive.arj
# 输出示例:
# Processing archive: archive.arj
#
# Date Time Attr Size Compressed Name
# ----------------- --- ---------- ---------- ----
# 2020-05-10 14:30:30 -rw-r--r-- 12456 5678 README.txt
# 2020-05-10 14:31:45 -rw-r--r-- 245678 98765 document.doc
# 2020-05-10 14:32:10 -rwxr-xr-x 56789 23456 program.exe
# ----------------- --- ---------- ---------- ----
# 3 files 314923 127899
# 详细列出压缩包内容
unarj v archive.arj
# 显示完整路径
unarj l -jp archive.arj
# 测试ARJ文件完整性
unarj t archive.arj
# 测试多个ARJ文件
unarj t archive1.arj archive2.arj archive3.arj
# 测试压缩包中的特定文件
unarj t archive.arj important.txt
# 在脚本中测试文件完整性
if unarj t archive.arj >/dev/null 2>&1; then
echo "压缩文件完整"
else
echo "压缩文件损坏"
fi
# 将文件解压到标准输出
unarj p archive.arj readme.txt
# 查看压缩包中的文本文件
unarj p archive.arj readme.txt | less
# 搜索压缩包内容
unarj p archive.arj log.txt | grep "error"
# 统计文件行数
unarj p archive.arj data.csv | wc -l
# 保存到新文件
unarj p archive.arj config.ini > new_config.ini
# 解压多卷ARJ文件(.arj, .a01, .a02等)
unarj e archive.arj
# 指定多卷文件的基础名
unarj e archive
# 解压特定卷中的文件
unarj e archive.arj -v2 # 只处理第二卷
# 列出多卷压缩包内容
unarj l archive.arj -v # -v参数显示卷信息
# 测试多卷压缩包完整性
unarj t archive.arj -v
# 解压时跳过损坏的卷
unarj e archive.arj -y # -y参数对所有询问回答"是"
# 从ARJ压缩包中删除文件
unarj d archive.arj oldfile.txt
# 删除多个文件
unarj d archive.arj file1.txt file2.txt
# 自动确认删除操作
unarj d -y archive.arj obsolete.doc
# 删除前先查看内容
unarj l archive.arj
unarj d archive.arj tempfile.tmp
unarj l archive.arj # 确认文件已删除
# 解压时保留文件时间戳
unarj x archive.arj -jt
# 显示详细解压过程
unarj e -v archive.arj
# 解压特定类型的文件
unarj e archive.arj *.txt
# 解压到指定目录
mkdir extracted_files
cd extracted_files
unarj e ../archive.arj
# 批量解压多个ARJ文件
for arj_file in *.arj; do
echo "解压: $arj_file"
unarj e "$arj_file"
done
# 解压加密的ARJ文件(如果有密码)
# 注意:unarj不支持加密的ARJ文件,需要使用其他工具
# 如:7z x -p密码 archive.arj
filename.arjfilename.a01filename.a02# 查看ARJ文件头部信息
file archive.arj
# 输出:archive.arj: ARJ archive data, v14, slash-switched, os: DOS, arj protected
# 使用hexdump查看文件头
hexdump -C archive.arj | head -20
# 输出示例:
# 00000000 60 ea 27 00 1c 0a 02 00 10 00 00 00 00 00 00 00 |`.'.............|
# 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
# ARJ文件头特征
# 前两个字节:0x60 0xEA(ARJ签名)
# 接下来的2字节:头部大小
# 第一个文件头开始位置:0x20(32字节)
| 工具 | 支持格式 | 创建压缩 | 解压 | 流行程度 | 推荐用途 |
|---|---|---|---|---|---|
| unarj | .arj | 不支持 | 支持 | 遗留系统 | 解压旧ARJ文件 |
| arj | .arj | 支持 | 支持 | 遗留系统 | 完整ARJ支持 |
| 7z/7za | .arj, .zip, .rar等 | 支持 | 支持 | 广泛 | 多种格式支持 |
| unzip | .zip | 不支持 | 支持 | 非常广泛 | 解压ZIP文件 |
| gunzip | .gz, .z | 不支持 | 支持 | 非常广泛 | 解压gzip文件 |
# 安装p7zip(支持ARJ格式)
sudo apt install p7zip-full # Debian/Ubuntu
sudo yum install p7zip # RHEL/CentOS
# 使用7z解压ARJ文件
7z x archive.arj
# 列出ARJ文件内容
7z l archive.arj
# 测试ARJ文件完整性
7z t archive.arj
# 解压到指定目录
7z x archive.arj -o/path/to/extract
# 解压特定文件
7z x archive.arj file.txt
# 7z支持更多格式
7z x archive.zip # ZIP格式
7z x archive.rar # RAR格式
7z x archive.tar.gz # tar.gz格式
#!/bin/bash
# 批量解压ARJ文件脚本
SOURCE_DIR="/path/to/arj/files"
TARGET_DIR="/path/to/extracted"
LOG_FILE="arj_extraction.log"
ERROR_LOG="arj_errors.log"
# 创建目录
mkdir -p "$SOURCE_DIR" "$TARGET_DIR"
echo "=== ARJ批量解压工具 ==="
echo "开始时间: $(date)"
echo "源目录: $SOURCE_DIR"
echo "目标目录: $TARGET_DIR"
echo ""
# 计数器
total_files=0
success_count=0
fail_count=0
# 检查unarj是否安装
if ! command -v unarj &> /dev/null; then
echo "错误: unarj未安装"
echo "请使用以下命令安装:"
echo " Debian/Ubuntu: sudo apt install unarj"
echo " RHEL/CentOS: sudo yum install unarj"
exit 1
fi
# 处理所有ARJ文件
for arj_file in "$SOURCE_DIR"/*.arj "$SOURCE_DIR"/*.ARJ; do
[ -f "$arj_file" ] || continue
total_files=$((total_files + 1))
filename=$(basename "$arj_file")
file_basename="${filename%.*}"
extract_dir="$TARGET_DIR/$file_basename"
echo "处理文件 ($total_files): $filename"
# 创建解压目录
mkdir -p "$extract_dir"
# 测试文件完整性
echo -n " 测试文件完整性..."
if unarj t "$arj_file" >/dev/null 2>&1; then
echo "✓ 通过"
else
echo "✗ 失败"
echo "$filename: 完整性测试失败" >> "$ERROR_LOG"
fail_count=$((fail_count + 1))
continue
fi
# 解压文件
echo -n " 解压文件..."
cd "$extract_dir"
if unarj x "$arj_file" >/dev/null 2>&1; then
# 检查解压结果
extracted_count=$(find . -type f | wc -l)
if [ "$extracted_count" -gt 0 ]; then
echo "✓ 完成 (${extracted_count}个文件)"
echo "$filename: 成功解压 ${extracted_count}个文件" >> "$LOG_FILE"
success_count=$((success_count + 1))
else
echo "✗ 无文件解压"
echo "$filename: 解压后无文件" >> "$ERROR_LOG"
fail_count=$((fail_count + 1))
fi
else
echo "✗ 解压失败"
echo "$filename: 解压失败" >> "$ERROR_LOG"
fail_count=$((fail_count + 1))
fi
cd - >/dev/null
echo ""
done
# 显示统计信息
echo "=== 解压完成 ==="
echo "总文件数: $total_files"
echo "成功解压: $success_count"
echo "失败: $fail_count"
echo ""
echo "详细信息查看:"
echo " 日志文件: $LOG_FILE"
echo " 错误日志: $ERROR_LOG"
echo "解压文件位于: $TARGET_DIR"
# 如果有失败的文件,显示列表
if [ -f "$ERROR_LOG" ] && [ -s "$ERROR_LOG" ]; then
echo ""
echo "=== 失败文件列表 ==="
cat "$ERROR_LOG"
fi
#!/bin/bash
# ARJ转ZIP格式工具
CONVERT_DIR="/path/to/convert"
OUTPUT_DIR="/path/to/zip_files"
KEEP_ARJ=false # 是否保留原始ARJ文件
# 创建目录
mkdir -p "$CONVERT_DIR" "$OUTPUT_DIR"
echo "=== ARJ转ZIP转换工具 ==="
echo "开始时间: $(date)"
# 检查必要工具
check_tool() {
if ! command -v "$1" &> /dev/null; then
echo "错误: $1 未安装"
return 1
fi
return 0
}
# 检查unarj和zip
if ! check_tool "unarj"; then
echo "请安装unarj: sudo apt install unarj"
exit 1
fi
if ! check_tool "zip"; then
echo "请安装zip: sudo apt install zip"
exit 1
fi
# 转换函数
convert_arj_to_zip() {
local arj_file="$1"
local filename=$(basename "$arj_file")
local basename="${filename%.*}"
local temp_dir=$(mktemp -d)
local zip_file="$OUTPUT_DIR/$basename.zip"
echo "转换: $filename"
# 1. 解压ARJ到临时目录
echo -n " 解压ARJ..."
if unarj x "$arj_file" -d "$temp_dir" >/dev/null 2>&1; then
echo "✓ 完成"
else
echo "✗ 失败"
rm -rf "$temp_dir"
return 1
fi
# 2. 创建ZIP文件
echo -n " 创建ZIP..."
cd "$temp_dir"
if zip -rq "$zip_file" .; then
echo "✓ 完成"
else
echo "✗ 失败"
cd - >/dev/null
rm -rf "$temp_dir"
return 1
fi
cd - >/dev/null
# 3. 验证ZIP文件
echo -n " 验证ZIP..."
if unzip -tq "$zip_file" >/dev/null 2>&1; then
echo "✓ 有效"
else
echo "✗ 无效"
rm -f "$zip_file"
rm -rf "$temp_dir"
return 1
fi
# 4. 统计信息
arj_size=$(stat -c%s "$arj_file")
zip_size=$(stat -c%s "$zip_file")
ratio=$(echo "scale=2; ($zip_size * 100) / $arj_size" | bc)
echo " 原始ARJ: $(numfmt --to=iec $arj_size)"
echo " 转换ZIP: $(numfmt --to=iec $zip_size)"
echo " 大小比例: ${ratio}%"
# 5. 清理临时目录
rm -rf "$temp_dir"
# 6. 可选:删除原始ARJ文件
if [ "$KEEP_ARJ" = false ]; then
echo " 删除原始ARJ文件"
rm -f "$arj_file"
fi
return 0
}
# 处理所有ARJ文件
converted=0
failed=0
for arj_file in "$CONVERT_DIR"/*.arj "$CONVERT_DIR"/*.ARJ; do
[ -f "$arj_file" ] || continue
echo ""
if convert_arj_to_zip "$arj_file"; then
converted=$((converted + 1))
else
failed=$((failed + 1))
fi
done
# 显示结果
echo ""
echo "=== 转换完成 ==="
echo "成功转换: $converted 个文件"
echo "转换失败: $failed 个文件"
echo "ZIP文件位于: $OUTPUT_DIR"
echo ""
# 显示磁盘使用情况
if [ "$converted" -gt 0 ]; then
echo "磁盘使用情况:"
du -sh "$OUTPUT_DIR"
fi
#!/bin/bash
# ARJ文件信息统计工具
SCAN_DIR="$1"
REPORT_FILE="arj_report_$(date +%Y%m%d_%H%M%S).csv"
# 默认扫描当前目录
if [ -z "$SCAN_DIR" ]; then
SCAN_DIR="."
fi
echo "=== ARJ文件信息统计 ==="
echo "扫描目录: $SCAN_DIR"
echo "报告文件: $REPORT_FILE"
echo "开始时间: $(date)"
echo ""
# 创建CSV报告头
echo "文件名,大小,修改时间,文件数,压缩前大小,压缩后大小,压缩比,多卷,状态" > "$REPORT_FILE"
# 计数器
total_files=0
total_compressed=0
total_uncompressed=0
# 查找ARJ文件
find "$SCAN_DIR" -type f \( -name "*.arj" -o -name "*.ARJ" -o -name "*.a??" \) | while read arj_file; do
total_files=$((total_files + 1))
# 获取基本信息
filename=$(basename "$arj_file")
filepath=$(dirname "$arj_file")
filesize=$(stat -c%s "$arj_file" 2>/dev/null || echo "0")
modtime=$(stat -c%y "$arj_file" 2>/dev/null || echo "未知")
echo "分析: $filename"
# 检查是否为多卷文件
is_multivolume=0
if [[ "$filename" =~ \.a[0-9][0-9]$ ]]; then
is_multivolume=1
base_name=$(echo "$filename" | sed 's/\.[^.]*$//')
echo " 检测到多卷文件: $base_name"
fi
# 获取ARJ文件信息
if unarj l "$arj_file" >/dev/null 2>&1; then
# 提取信息
arj_info=$(unarj l "$arj_file" 2>/dev/null | tail -5)
# 提取文件数和大小信息
file_count=$(echo "$arj_info" | grep "files" | awk '{print $1}' || echo "0")
uncompressed_size=$(echo "$arj_info" | grep "files" | awk '{print $3}' | tr -d ',' || echo "0")
compressed_size=$(echo "$arj_info" | grep "files" | awk '{print $5}' | tr -d ',' || echo "0")
# 计算压缩比
if [ "$uncompressed_size" -gt 0 ]; then
compression_ratio=$(echo "scale=2; ($compressed_size * 100) / $uncompressed_size" | bc)
else
compression_ratio="0"
fi
status="正常"
# 累计统计
total_compressed=$((total_compressed + compressed_size))
total_uncompressed=$((total_uncompressed + uncompressed_size))
else
# 无法读取ARJ信息
file_count="0"
uncompressed_size="0"
compressed_size="0"
compression_ratio="0"
status="损坏或非ARJ格式"
fi
# 写入CSV
echo "\"$filename\",$filesize,\"$modtime\",$file_count,$uncompressed_size,$compressed_size,$compression_ratio,$is_multivolume,\"$status\"" >> "$REPORT_FILE"
# 显示进度
echo " 文件数: $file_count, 压缩比: ${compression_ratio}%, 状态: $status"
done
# 生成统计摘要
echo ""
echo "=== 统计摘要 ==="
echo "找到ARJ文件数: $total_files"
echo "总压缩大小: $(numfmt --to=iec $total_compressed)"
echo "总原始大小: $(numfmt --to=iec $total_uncompressed)"
if [ "$total_uncompressed" -gt 0 ]; then
overall_ratio=$(echo "scale=2; ($total_compressed * 100) / $total_uncompressed" | bc)
echo "总体压缩比: ${overall_ratio}%"
fi
echo ""
echo "详细报告已保存到: $REPORT_FILE"
echo "可以使用电子表格软件打开查看"
sudo apt update && sudo apt install unarjsudo yum install unarj 或从EPEL仓库安装sudo dnf install unarjsudo pacman -S unarjsudo zypper install unarj# 下载源码
wget http://example.com/unarj-source.tar.gz
tar -xzf unarj-source.tar.gz
cd unarj-source
make
sudo make install
替代方案:使用7z/p7zip,它支持ARJ格式且更常用:
# 安装p7zip
sudo apt install p7zip-full
# 使用7z解压ARJ
7z x archive.arj
convmv转换文件名编码# 方法1:安装并使用convmv
sudo apt install convmv
# 解压文件
unarj e archive.arj
# 转换文件名编码(GBK到UTF-8)
convmv -f GBK -t UTF-8 --notest *
# 方法2:设置locale(针对GBK编码)
export LANG=zh_CN.GBK
unarj e archive.arj
# 方法3:使用7z(推荐)
7z x -p密码 archive.arj
# 方法4:使用iconv配合find转换所有文件
find . -name "*.txt" -exec iconv -f GBK -t UTF-8 {} -o {}.utf8 \;
find . -name "*.txt.utf8" -exec rename 's/\.utf8$//' {} \;
注意:如果文件内容也是DOS编码,需要使用iconv转换文件内容。
| 功能 | unarj | arj |
|---|---|---|
| 创建ARJ压缩包 | 不支持 | 支持 |
| 解压ARJ压缩包 | 支持 | 支持 |
| 多卷压缩 | 仅解压 | 完整支持 |
| 加密/解密 | 不支持 | 支持 |
| 文件恢复 | 不支持 | 支持 |
| 自解压文件 | 仅解压 | 完整支持 |
安装arj:
# Debian/Ubuntu
sudo apt install arj
# RHEL/CentOS
sudo yum install arj
# 使用arj创建压缩包
arj a archive.arj file1.txt file2.txt
# 使用arj解压
arj x archive.arj
# 查看arj帮助
arj -?
推荐:如果需要创建ARJ文件或使用高级功能,安装完整的arj包。如果只需要解压,unarj足够。
完整的ARJ压缩工具:
# 创建ARJ压缩包
arj a archive.arj files/
# 解压ARJ文件
arj x archive.arj
# 查看ARJ文件内容
arj l archive.arj
# 测试ARJ文件
arj t archive.arj
支持ARJ的通用压缩工具:
# 解压ARJ文件
7z x archive.arj
# 列出ARJ内容
7z l archive.arj
# 创建ZIP压缩包
7z a archive.zip files/
# 支持多种格式
7z x archive.rar
7z x archive.zip
解压ZIP文件:
unzip archive.zip
unzip -l archive.zip
unzip -t archive.zip
unzip -d dir archive.zip
识别文件类型:
file archive.arj
file unknown.archive
file -i archive.arj # MIME类型
file -z archive.arj # 查看压缩文件