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

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

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

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

unzip -l myfile.zip | grep "foo"

これにより、zipエントリのリストが提供されます。 grepフィルタを通過するファイルをどのように抽出できますか?試してみましたが、xargs unzip -jzipエントリで役に立たない情報を整理する必要があるため、よりきれいな解決策が必要です。

答え1

ステファンの考えは正しかったzip抽出したいファイル名に対応するワイルドカードを渡します。解析された出力は、unzipヘッダーに付属する末尾の行に注意を払う必要があることを意味します。

次のようなものを使用してください。

unzip -j myfile.zip '*foo*'

注意深いシェルからのワイルドカードの引用

greppingの出力ラインに沿って続行する場合は、unzipヘッダーとトレーラーを削除してファイル名のリストに減らします。

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

関連情報