如何使用一个或多个部分(rar 或 7z)递归提取一个或多个档案并在提取后删除档案?

如何使用一个或多个部分(rar 或 7z)递归提取一个或多个档案并在提取后删除档案?

如果有人能帮我解决这个问题,我会非常非常高兴。我希望能够提取一个或多个文件,其中只有一个或多个部分,然后删除存档。这是否适用于 7z 或 unrar 并不重要。

到目前为止,我发现了这个命令和参数,它确实有效 - 但有一件事不起作用 - 脚本还想提取第二部分(和第三部分,依此类推)!但脚本应该只提取第一部分(或唯一部分),然后删除它(或其他部分)

例如:

香蕉.part1.rar 香蕉.part2.rar

该脚本到目前为止运行良好:

find . -name '*.rar' -execdir unrar x {} \; -exec rm {} \;

但脚本还尝试解压 .part2.rar 和其他部分 :( 这是因为这个通配符... 而且不可能说 '*.part1.rar" 因为一些档案也可能只有“banana.rar”。 也许应该有一个 -not -name 的东西,不是 .part2 及更高版本或 .part02 及更高版本 :/

所以我的想法是一个命令/脚本,以递归方式提取所有 .rar/7z 档案(可能包含部分内容),然后删除所有 .rar/.7z 文件。

(现在,一个小时后我编写了这个脚本^^):

find . -name '*.001' -execdir 7z x {} \; && find . -name "*7z*" -type f -delete

如果其他人没有更好的解决方案,我会将此作为解决方案发布。它仅适用于 7z,因为我每次都可以设置参数以 2048MiB 部分创建文件 - 因此 7z 将始终创建 .001 结尾。即使文件小于 2048MiB,每个文件都将以 .001 结尾。因此 find 将在开头找到所有 .7z 档案并提取它们,然后它将递归扫描目录以删除每个 7z 文件 - 现在 .001 或 .069 都无关紧要 :)

答案1

find . -name '*.001' -execdir 7z x {} \; && find . -name "*7z*" -type f -delete

正如主帖中提到的,这是迄今为止我得到的最佳解决方案。

相关内容