如何使用命令行删除拆分 RAR 存档文件的所有部分?

fsw*_*ngs 7 linux debian command-line archiving

我通常使用某种基于 Debian 的 Linux 发行版;Debian 7.8 或 Linux Mint 17。我有一个这样的拆分 RAR 文件:

filename.rar
filename.r01
filename.r02
filename.r03
etc ...
Run Code Online (Sandbox Code Playgroud)

使用dtrx或提取存档后unrar,我想删除拆分存档的所有部分文件,最好是一行。

目前我这样做rm filename.r*,通常效果很好,但是如果文件的名称与rabbid.ranger.robot.r01它类似,也可以删除提取的目录rabbid.ranger.robot

所以我正在寻找更强大的东西。

也将接受一个简短的脚本。

小智 10

假设您有一个分割的 RAR,其零件编号最多为 12(即,filename.r12作为您的最后一个文件),并且您希望格外小心,不要删除任何其他文件。假设bash是您的 shell并且您使用的是版本 4 或更高版本bash --version以进行检查),您可以使用大括号扩展轻松创建显式文件列表:

rm filename.rar filename.r{01..12}
Run Code Online (Sandbox Code Playgroud)

这将删除那些文件:即使是名为filename.rtf(或filename.r13) 的文件也将被保留。根据您在文件夹中拥有(或可能拥有)的其他文件,这可能比Devan 建议的通常非常好的.r??方法更可取,也可能不更可取。

括号扩展,包括数字范围,是几个 shell 的一个非常古老的功能。但是在第 4 版之前,bash 不支持零填充(即,您想要的名称是filename.r05,而不是filename.r5)。

您可以先检查大括号表达式将扩展为哪些文件名:

$ echo filename.rar filename.r{01..12}
filename.rar filename.r01 filename.r02 filename.r03 filename.r04 filename.r05 filename.r06 filename.r07 filename.r08 filename.r09 filename.r10 filename.r11 filename.r12
Run Code Online (Sandbox Code Playgroud)

(您也可以使用*?这种方式检查表达式——请记住,它扩展到的内容取决于您在运行命令时所在的文件夹。)


小智 6

根据.r0*您拥有的文件数量,您可以*用 a替换,?这将删除具有 .r0 和 1 个其他字符的文件。所以它会删除rabbid.ranger.robot.r01但不是rabbid.ranger.robot.r010 一般我会这样使用它:

rm filename.r??
Run Code Online (Sandbox Code Playgroud)