我有一个包含大量文件的 zip 档案和一个包含文件列表(约 10000 个项目)的纯文本文件,我需要使用 bash 从该档案中提取这些文件。
执行该操作的最佳方法是什么?显而易见的方法是针对文件的每一行运行解压缩,但它看起来很慢。
答案1
您不需要unzip
在每个文件上运行,而是可以通过提供纯文本文件作为输入来在整个文件列表上运行:
unzip -j MyZipFile.zip <<<textfile
答案2
Unzip 支持指定要解压的文件:
unzip archive.zip file1.txt file2.txt file3.txt ...
但对于 10000 个项目,这种方法行不通。您可以将文件列表拆分为 100 个块,然后对它们运行解压缩,这比单独提取每个文件要快得多。
答案3
您可以使用 xargs 并-a
选择一个选项来从文件中读取参数。如果存在这样的限制,可能还会使用一个标志将参数数量限制为适当的数量,以确保 shell 不会处理太多参数。