web-dev-qa-db-ja.com

コマンドラインから.Zipアーカイブからファイルを選択的に抽出します

大きなZipファイル(> 50GB)があり、コマンドラインからいくつかのファイルを抽出したいとします。

ファイルを取得するには、次のコマンドを実行します。

unzip -l myfile.Zip | grep "foo"

zipエントリのリストが表示されます。 grepフィルターを通過するファイルを抽出するにはどうすればよいですか? xargs unzip -jを使用してみましたが、Zipエントリでは不要な情報を消去する必要があるため、よりクリーンなソリューションが必要です。

1
Warrior

ステファンは正しい考えを持っています 抽出したいファイル名に対応するワイルドカードをZipに渡します。 unzipの出力を解析するということは、ヘッダーとトレーラーの行に注意する必要があることを意味します。

次のようなものを使用します:

unzip -j myfile.Zip '*foo*'

注意してください シェルからワイルドカードを引用してください

unzipの出力をgrepする方向に沿って続行する場合は、ヘッダーとトレーラーを取り除き、ファイル名の列に減らします。

unzip -l myfile.Zip | sed '1,3d; /---------                     -------/d; $d'|cut -c31-
3
Jeff Schaller