我有一个很大的 RAR 档案文件夹。文件夹级别有明显的层次结构。我想一次解压缩整个档案集。
我有以下单线,可以工作:
find -name "*.rar" -print0 | xargs -0 -n 1 -P 4 unrar x
Run Code Online (Sandbox Code Playgroud)
(请注意,我们并行运行四个线程以加快操作速度。:-))
此命令的问题在于 xargs 是在每个 RAR 文件的顶级目录中执行的。这意味着所有输出都被转储到顶级文件夹中。
相反,我希望输出与 RAR 存档存在于同一文件夹中。
例子:
Top level
|--FolderA
|----File1.rar
|----File2.rar
|--FolderB
|----File1.rar
|----File2.rar
|----File3.rar
|--FolderC
|----File1.rar
|----File2.rar
Run Code Online (Sandbox Code Playgroud)
每个“File1.rar”文件都包含一个同名文件。因此,将它们全部提取到顶级文件夹会导致覆盖问题。
总而言之,我想提取上述层次结构中的所有 RAR 文件。我希望每个 RAR 文件的内容都存在于 RAR 文件所在的文件夹中。
在我看来,解决方案是以某种方式设置工作目录,然后在那里运行 unrar 命令表单。但是,由于 find 命令给了我文件名,而不是目录,我不能做类似的事情
| xargs -I{} -n 1 -P 4 cd {} \; unrar x {}
Run Code Online (Sandbox Code Playgroud)
没有编写一个 Perl 或 Python 脚本来环绕 unrar 命令并处理将提供的路径分成其部分并执行命令,有没有更好的方法来实现这一点?