从每个 7zip 存档中批量提取一个文件(任何)(Unix)

Extract exactly one file (any) from each 7zip archive, in bulk (Unix)

我有 1,500 个 7zip 档案,每个档案包含 2 到 10 个文件,没有子目录。

每个文件都有相同的扩展名,但文件名不同。

我只想要每个存档中的一个文件,但我想批量执行此操作。我不关心取出哪个文件,只要取出一个文件即可。可以是第一个文件,最新的,最大的,最小的,都可以。

这是一个例子:

aa.7z {blah 56.smc, blah 57.smc, 1 blah 58.smc}
ab.7z {xx.smc, xx 1.smc, xx_2.smc}
ac.7z {1.smc}

我想 运行 相当于:

7z e *.7z # But somehow only extract one file

谢谢!

最终我的解决方案是提取目录中的所有文件和运行以下内容:

for n in *; do echo "$n"; done > files.txt

然后我将该列表导入 excel,并通过特殊字符拆分文件,该字符将文件标题与文件名中的合格数据分开(例如:Some Title (V1) [X2 ].smc),特别是我使用了括号定界符。

然后我删除了所有重复项,从 zip 中只剩下一个版本。我终于重新合并了列(不幸的是括号在拆分过程中被删除所以写了一个函数来根据下一列中是否有内容的条件将其添加回来)然后重新保存files.txt,经过一些审查 Whosebug对于答案,已根据输入文件 (files.txt) 删除文件。在此提醒一句,文件名中的空格会导致 rm 和 xargs 出现问题,因此我不得不用引号将变量封装起来。

最终这对我来说仍然不够好,所以我完全使用了不同的资源。

发布此答案,以便发现自己处于类似困境的其他人找到替代解决方案。