.bz2 - bzip2压缩文件.bz - bzip2压缩文件(旧格式).tbz2 - tar+bzip2压缩包.tbz - tar+bzip压缩包.tar.bz2 - tar+bzip2压缩包bunzip2 [选项] [文件名...]
| 参数 | 说明 |
|---|---|
| -f, --force | 强制覆盖已存在的输出文件 |
| -k, --keep | 解压后保留原压缩文件(不删除) |
| -s, --small | 减少内存使用(适用于小内存系统) |
| -q, --quiet | 静默模式,不显示警告信息 |
| -v, --verbose | 详细模式,显示处理信息 |
| -L, --license | 显示软件版本和许可信息 |
| -V, --version | 显示版本信息 |
| -t, --test | 测试压缩文件的完整性 |
| -c, --stdout | 将解压内容输出到标准输出 |
| -d, --decompress | 强制解压(默认行为) |
| -z, --compress | 压缩(实际调用bzip2) |
| --fast | 与-1相同,快速压缩(调用bzip2时) |
| --best | 与-9相同,最佳压缩(调用bzip2时) |
# 解压单个文件(默认会删除原压缩文件)
bunzip2 file.txt.bz2
# 解压后得到:file.txt,原file.txt.bz2被删除
# 解压多个文件
bunzip2 file1.txt.bz2 file2.txt.bz2 file3.txt.bz2
# 解压并保留原压缩文件
bunzip2 -k archive.bz2
# 或
bunzip2 --keep data.bz2
# 解压到不同目录
bunzip2 -c /path/to/source/file.bz2 > /new/path/file.txt
# 将解压内容输出到屏幕
bunzip2 -c file.txt.bz2
# 查看压缩文件内容
bunzip2 -c file.txt.bz2 | less
# 搜索压缩文件内容
bunzip2 -c logfile.bz2 | grep "error"
# 解压并统计行数
bunzip2 -c file.txt.bz2 | wc -l
# 解压并保存到新文件
bunzip2 -c archive.bz2 > extracted_file.txt
# 测试单个文件
bunzip2 -t file.bz2
# 如果没有错误,不会有输出
# 测试多个文件
bunzip2 -t file1.bz2 file2.bz2 file3.bz2
# 详细测试模式
bunzip2 -tv archive.bz2
# 输出:archive.bz2: ok
# 在脚本中测试
if bunzip2 -t archive.bz2 2>/dev/null; then
echo "文件完整"
else
echo "文件损坏"
fi
# 强制覆盖已存在的文件
bunzip2 -f file.bz2
# 或
bunzip2 --force archive.bz2
# 强制解压(明确指定)
bunzip2 -d compressed.bz2
# 静默解压(不显示警告)
bunzip2 -q file.bz2
# 详细模式(显示处理信息)
bunzip2 -v largefile.bz2
# 输出:largefile.bz2: done
# 限制内存使用(适用于嵌入式系统)
bunzip2 -s hugefile.bz2
# 解压文件名中包含空格的文件
bunzip2 "my file.bz2"
# 或
bunzip2 my\ file.bz2
# 解压文件名包含特殊字符的文件
bunzip2 file-*.bz2
bunzip2 file-2024-01-01.bz2
# 批量解压当前目录下所有.bz2文件
for f in *.bz2; do
bunzip2 "$f"
done
# 批量解压并保留原文件
for f in *.bz2; do
bunzip2 -k "$f"
done
# 方法1:先解压再提取
bunzip2 archive.tar.bz2
tar -xvf archive.tar
# 方法2:使用管道
bunzip2 -c archive.tar.bz2 | tar -xv
# 方法3:使用tar命令直接解压(推荐)
tar -xjvf archive.tar.bz2
# 参数说明:
# -x 解压
# -j 使用bzip2解压
# -v 显示详细信息
# -f 指定文件名
# 解压到指定目录
tar -xjvf archive.tar.bz2 -C /target/directory
# 场景1:处理日志文件
# 解压并分析压缩的日志文件
bunzip2 -c /var/log/apache2/access.log.bz2 | \
grep "404" | \
wc -l
# 场景2:数据库备份恢复
# 解压数据库备份
bunzip2 -k database_backup.sql.bz2
# 然后导入数据库
mysql -u root -p database_name < database_backup.sql
# 场景3:软件安装
# 下载并解压软件源码
wget https://example.com/software-1.0.tar.bz2
tar -xjvf software-1.0.tar.bz2
cd software-1.0
./configure
make
sudo make install
bunzip2和bzip2是同一个软件包中的两个命令,它们实际上是指向同一个二进制文件的不同链接:
| 命令 | 主要功能 | 默认行为 | 常用选项 |
|---|---|---|---|
bunzip2 |
解压文件 | 解压.bz2文件 | -k, -c, -t, -f |
bzip2 |
压缩文件 | 压缩文件为.bz2 | -k, -c, -t, -f, -1到-9 |
bzcat |
解压到标准输出 | 相当于bunzip2 -c | 同bunzip2 |
bzip2recover |
恢复损坏的bz2文件 | 尝试恢复数据 | -d, -f |
# 查看命令的链接关系
ls -l /usr/bin/bzip2 /usr/bin/bunzip2 /usr/bin/bzcat
# 输出示例:
# lrwxrwxrwx 1 root root 6 Apr 5 2020 /usr/bin/bunzip2 -> bzip2*
# lrwxrwxrwx 1 root root 6 Apr 5 2020 /usr/bin/bzcat -> bzip2*
# -rwxr-xr-x 1 root root 58112 Apr 5 2020 /usr/bin/bzip2*
# 验证它们是同一个文件
ls -i /usr/bin/bzip2 /usr/bin/bunzip2 /usr/bin/bzcat
# 输出相同的inode号
| 压缩工具 | 扩展名 | 压缩率 | 压缩速度 | 内存使用 | 适用场景 |
|---|---|---|---|---|---|
| bzip2 | .bz2 | 高 | 中等 | 较高 | 文本文件、软件分发 |
| gzip | .gz | 中等 | 快 | 低 | 通用、日志文件 |
| xz | .xz | 很高 | 慢 | 高 | 归档、分发 |
| zip | .zip | 中等 | 快 | 低 | Windows兼容 |
| 7z | .7z | 很高 | 中等 | 较高 | 高压缩率需求 |
# 创建测试文件
dd if=/dev/urandom of=testfile.bin bs=1M count=10
# 使用不同工具压缩
time gzip -c testfile.bin > testfile.gz
time bzip2 -c testfile.bin > testfile.bz2
time xz -c testfile.bin > testfile.xz
# 比较文件大小
ls -lh testfile.*
# 输出:
# -rw-r--r-- 1 user user 10M Jan 10 10:00 testfile.bin
# -rw-r--r-- 1 user user 9.8M Jan 10 10:00 testfile.bz2
# -rw-r--r-- 1 user user 10M Jan 10 10:00 testfile.gz
# -rw-r--r-- 1 user user 9.7M Jan 10 10:00 testfile.xz
#!/bin/bash
# 批量解压.bz2文件并监控进度
SOURCE_DIR="/data/compressed"
TARGET_DIR="/data/extracted"
LOG_FILE="/var/log/bunzip2_script.log"
# 创建目标目录
mkdir -p "$TARGET_DIR"
# 记录开始时间
start_time=$(date +%s)
echo "=== 开始批量解压 $(date) ===" >> "$LOG_FILE"
# 计数器
total=0
success=0
failed=0
# 遍历所有.bz2文件
for bz2_file in "$SOURCE_DIR"/*.bz2; do
[ -f "$bz2_file" ] || continue
total=$((total + 1))
filename=$(basename "$bz2_file")
target_name="${filename%.bz2}"
echo "正在解压: $filename" | tee -a "$LOG_FILE"
# 执行解压
if bunzip2 -k -c "$bz2_file" > "$TARGET_DIR/$target_name" 2>/dev/null; then
echo "✓ 成功: $filename" | tee -a "$LOG_FILE"
success=$((success + 1))
else
echo "✗ 失败: $filename" | tee -a "$LOG_FILE"
failed=$((failed + 1))
fi
done
# 记录结束时间
end_time=$(date +%s)
duration=$((end_time - start_time))
# 输出统计信息
echo "=== 解压完成 ===" | tee -a "$LOG_FILE"
echo "总文件数: $total" | tee -a "$LOG_FILE"
echo "成功: $success" | tee -a "$LOG_FILE"
echo "失败: $failed" | tee -a "$LOG_FILE"
echo "耗时: ${duration}秒" | tee -a "$LOG_FILE"
echo "平均速度: $((total / duration)) 文件/秒" | tee -a "$LOG_FILE"
#!/bin/bash
# 自动处理备份文件的解压和验证
BACKUP_DIR="/backups"
EXTRACT_DIR="/data/restored"
RETENTION_DAYS=30
# 创建必要的目录
mkdir -p "$EXTRACT_DIR"
# 查找需要解压的.bz2备份文件
find "$BACKUP_DIR" -name "*.bz2" -mtime -1 | while read backup_file; do
echo "处理备份文件: $(basename "$backup_file")"
# 提取文件名(不带扩展名)
base_name=$(basename "$backup_file" .bz2)
extract_path="$EXTRACT_DIR/$base_name"
# 测试压缩文件完整性
if ! bunzip2 -t "$backup_file" 2>/dev/null; then
echo "错误: 压缩文件损坏 - $backup_file"
continue
fi
# 解压文件
echo "正在解压到: $extract_path"
if bunzip2 -k -c "$backup_file" > "$extract_path"; then
echo "✓ 解压成功"
# 验证解压文件大小
original_size=$(bunzip2 -c "$backup_file" | wc -c)
extracted_size=$(wc -c < "$extract_path")
if [ "$original_size" -eq "$extracted_size" ]; then
echo "✓ 文件大小验证通过"
else
echo "警告: 文件大小不匹配"
fi
else
echo "✗ 解压失败"
fi
done
# 清理旧文件
echo "清理超过${RETENTION_DAYS}天的文件..."
find "$EXTRACT_DIR" -type f -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -name "*.bz2" -mtime +$RETENTION_DAYS -delete
echo "处理完成"
#!/bin/bash
# 交互式.bz2文件解压工具
show_menu() {
echo "=== bzip2解压工具 ==="
echo "1. 解压单个文件"
echo "2. 批量解压目录"
echo "3. 测试压缩文件完整性"
echo "4. 查看压缩文件内容"
echo "5. 解压tar.bz2文件"
echo "6. 退出"
echo -n "请选择操作 [1-6]: "
}
extract_single() {
echo -n "请输入.bz2文件路径: "
read filepath
if [ ! -f "$filepath" ]; then
echo "错误: 文件不存在"
return
fi
if [[ "$filepath" != *.bz2 ]]; then
echo "错误: 不是.bz2文件"
return
fi
echo -n "解压后是否保留原文件? [y/N]: "
read keep_original
echo -n "输出到指定目录? (留空为当前目录): "
read output_dir
options=""
if [[ "$keep_original" =~ ^[Yy]$ ]]; then
options="$options -k"
fi
if [ -n "$output_dir" ]; then
mkdir -p "$output_dir"
filename=$(basename "$filepath" .bz2)
output_file="$output_dir/$filename"
bunzip2 $options -c "$filepath" > "$output_file"
else
bunzip2 $options "$filepath"
fi
if [ $? -eq 0 ]; then
echo "✓ 解压成功"
else
echo "✗ 解压失败"
fi
}
batch_extract() {
echo -n "请输入目录路径: "
read dirpath
if [ ! -d "$dirpath" ]; then
echo "错误: 目录不存在"
return
fi
count=$(find "$dirpath" -name "*.bz2" | wc -l)
if [ "$count" -eq 0 ]; then
echo "没有找到.bz2文件"
return
fi
echo "找到 $count 个.bz2文件"
echo -n "是否开始解压? [y/N]: "
read confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
find "$dirpath" -name "*.bz2" | while read file; do
echo "解压: $(basename "$file")"
bunzip2 -k "$file"
done
echo "批量解压完成"
fi
}
while true; do
show_menu
read choice
case $choice in
1) extract_single ;;
2) batch_extract ;;
3)
echo -n "请输入.bz2文件路径: "
read testfile
bunzip2 -t "$testfile" && echo "✓ 文件完整" || echo "✗ 文件损坏"
;;
4)
echo -n "请输入.bz2文件路径: "
read viewfile
bunzip2 -c "$viewfile" | less
;;
5)
echo -n "请输入.tar.bz2文件路径: "
read tarfile
echo -n "解压到目录: "
read tardir
mkdir -p "$tardir"
tar -xjf "$tarfile" -C "$tardir" && echo "✓ 解压成功" || echo "✗ 解压失败"
;;
6) echo "再见!"; exit 0 ;;
*) echo "无效选择" ;;
esac
echo ""
done
-k选项保留bzip2调用,默认压缩文件bunzip2调用,默认解压文件bzcat调用,相当于bunzip2 -c# 查看文件链接
ls -l $(which bunzip2) $(which bzip2)
# 实际测试
bunzip2 file.bz2
# 等同于
bzip2 -d file.bz2
-f选项强制解压# 使用bzip2recover尝试恢复
bzip2recover damaged.bz2
# 会生成rec*.bz2文件,尝试逐个解压
# 跳过文件开头(如果知道损坏位置)
dd if=damaged.bz2 bs=1 skip=100 > partial.bz2
bunzip2 -f partial.bz2 2>/dev/null
# 尝试忽略错误
bunzip2 -f damaged.bz2 2>/dev/null
# 查看是否能部分解压
bunzip2 -c damaged.bz2 2>/dev/null | head -100
tar命令直接解压:
-j选项(推荐)# 方法1:分两步
bunzip2 archive.tar.bz2
tar -xvf archive.tar
# 方法2:使用管道
bunzip2 -c archive.tar.bz2 | tar -xvf -
# 方法3:使用tar直接解压(最方便)
tar -xjvf archive.tar.bz2
# 或
tar --bzip2 -xvf archive.tar.bz2
# 解压到指定目录
tar -xjvf archive.tar.bz2 -C /target/directory
# 只列出内容不提取
tar -tjvf archive.tar.bz2
压缩文件为.bz2格式:
bzip2 file.txt
bzip2 -9 file.txt # 最大压缩
bzip2 -k file.txt # 保留原文件
解压.bz2文件到标准输出:
bzcat file.bz2
bzcat file.bz2 | less
bzcat file.bz2 > file.txt
尝试恢复损坏的.bz2文件:
bzip2recover damaged.bz2
# 生成rec*.bz2文件,尝试逐个解压
处理.tar.bz2压缩包:
tar -xjvf file.tar.bz2
tar -cjvf archive.tar.bz2 files/
tar -tjvf archive.tar.bz2