使用 UnRAR 查看并提取 RAR 文件

太阳作者太阳
原创内容采用 CC-4.0 协议发布,转载请注明出处
UnRARRAR命令行

处理 RAR 压缩包时,先用 unrar l 查看内容。确认压缩包内的目录和文件名以后,再提取需要的文件。

下文使用这些占位符:

  • ARCHIVE.rar:RAR 压缩包。
  • INTERNAL_PATH/FILE.ext:文件在压缩包内的完整路径。
  • OUTPUT_DIR:解压目标目录。

第一步:查看压缩包内容

unrar l ARCHIVE.rar

输出会显示 RAR 格式、压缩方式、文件大小、日期和内部路径。后面的提取命令必须使用这里列出的内部路径,目录名、文件名和扩展名都要一致。

只想查找某类文件时,可以把结果交给 rg 过滤。例如查找 SQL Server 的 .bak 备份:

unrar l ARCHIVE.rar | rg -i "\.bak"

如果系统没有安装 rg,也可以使用 grep

unrar l ARCHIVE.rar | grep -i "\.bak"

提取指定文件

unrar e 会去掉压缩包内的目录结构,把文件直接放入目标目录:

unrar e ARCHIVE.rar "INTERNAL_PATH/FILE.ext" OUTPUT_DIR/

一次提取多个指定文件时,把内部路径依次写在压缩包名称和目标目录之间:

unrar e ARCHIVE.rar "INTERNAL_PATH/FILE_A.ext" "INTERNAL_PATH/FILE_B.ext" OUTPUT_DIR/

也可以用通配符提取同一目录下的某类文件:

unrar e ARCHIVE.rar "INTERNAL_PATH/*.bak" OUTPUT_DIR/

保留压缩包内的目录结构

需要保留目录时,把 e 换成 x

unrar x ARCHIVE.rar "INTERNAL_PATH/FILE.ext" OUTPUT_DIR/

批量提取并保留目录:

unrar x ARCHIVE.rar "INTERNAL_PATH/*.bak" OUTPUT_DIR/

为什么这里不使用 7zz

实测中,7zz 25.01 无法打开一个 16 GiB 的 RAR 4 solid/lock 压缩包,返回 Cannot open the file as archiveunrar 6.21 能正常识别并列出其中的文件。因此这套操作直接使用 UnRAR,不再把 7zz 当作 RAR 解压的替代命令。

这只能说明该归档和工具组合的实际结果,不代表 7zz 无法处理所有 RAR 文件。遇到相同错误时,先换用 unrar l 检查,不必继续尝试 7zz x

提取后检查

先核对目标目录中的文件名和大小,再使用这些文件。数据库备份、镜像或其他重要文件如果附带校验值,还应核对哈希。

解压成功只说明文件已经取出,不代表备份、镜像或安装包本身可以正常使用。已有同名文件时,UnRAR 会询问是否覆盖;选择全部覆盖前,先确认目标目录没有需要保留的文件。