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