bash で zip アーカイブから大量のファイルを抽出するより良い方法

bash で zip アーカイブから大量のファイルを抽出するより良い方法

多数のファイルを含む zip アーカイブと、ファイルのリスト (約 10000 項目) を含むプレーンテキスト ファイルがあり、bash を使用してそのアーカイブから抽出する必要があります。

この操作を実行するための最良の方法は何ですか? 明らかな方法は、ファイルの各行に対して unzip を実行することですが、非常に遅いようです。

答え1

各ファイルに対して実行するのではなくunzip、プレーンテキスト ファイルを入力として渡すことで、ファイルのリスト全体に対して実行できます。

unzip -j MyZipFile.zip <<<textfile

答え2

Unzip では、抽出するファイルの指定がサポートされています。

unzip archive.zip file1.txt file2.txt file3.txt ...

しかし、これは 10000 個のアイテムには機能しません。ファイルのリストを 100 個のチャンクに分割し、それらを使用して unzip を実行できます。これは、各ファイルを個別に抽出するよりも高速な実装になります。

答え3

xargs を-aオプション付きで使用して、ファイルから引数を読み取ることができます。また、引数の数が多すぎてシェルが処理できないことがないように、引数の量を適切な数に制限するフラグも使用してください。

関連情報