- ベストアンサー
ZIPファイルの特定のファイルのみ抽出してZIP作成方法
- ZIPファイル内の特定のファイルのみ抽出してZIPファイルを作成
- パイプやコマンドを使ってうまくできないか
- WindowsXPで使用する特定のZIPプログラムを使っても良い
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ANo.1 です。 そうですね。簡単なコマンドですむ方法はむずかしいかもしれませんね。 それでは、思いついたことをいくつか。 (1) zip 内のファイルを削除する方法の場合。 新しい zip ファイルを 3 個つくるなら、3 個以上のコマンドが必要でしょう。 copy src.zip 1.zip & zip -d 1.zip "*" -x "?.jpg" "??.jpg" "???.jpg" copy src.zip 1000.zip & zip -d 1000.zip "*" -x "1???.jpg" copy src.zip 2000.zip & zip -d 2000.zip "*" -x "2???.jpg" 上の 3 行を 1 行につないでもよいのでしょうが、ややこしくなるだけでしょう。 ファイル名が簡単なワイルドカードで表せる場合は、これでどうでしょうか。 (2) *.jpg のファイル名が簡単なワイルドカードで指定できない場合。 (たとえば数字といっしょにアルファベットが混じるファイル名があって、それは zip ファイルにしたくないとか) ファイル名がいろいろあって簡単に指定できない場合は、ファイル名のリストを作っておくのがわかりやすいでしょう。 ファイル名がわからないときは zipinfo -1 src.zip "1???.jpg" > 1000.lst などとしていったんリストを作って、余計なファイルが混じるならあとで編集するなどの手間が必要かもしれません。 そのうえで、unzip でひとつずつ展開して、そのたびに zip でアーカイブに加えていくとかは、どうでしょう。 for /f %i in (dst.lst) do ( unzip src.zip %i zip -m dst.zip %i ) バッチファイルにして、dst のところを 1 とか 1000 とか 2000 とかのコマンドライン・パラメータで与えるのもいいかもしれません。 ファイル名の番号に規則性があるならリストファイルにしないで、 for /l %i in (1 1 999) などと、連続した番号を生成するのもありかなと思います。
その他の回答 (1)
- micari
- ベストアンサー率85% (12/14)
zip -d src.zip "*" -xi "*.jpg" これでどうでしょうか (InfoZIP の場合) src.zip から *.jpg 以外が削除されます (src.zip は変更されます) unzip と zip を組み合わせてパイプでつなぐのは、うまくいかないと思います。 質問欄にも > うまくいきません とありますが、どううまくいかないのか書いてありませんので、以下は想像です。 zip は各ファイルを圧縮してからアーカイブするので (アーカイブ化したひとつのファイルを圧縮するわけではない) それぞれのファイル名とタイムスタンプ、アトリビュートなどの情報が必要だと思います。 それに、パイプで複数ファイルを渡すと、つながってしまいます。JPEG 画像の場合、最初の画像の EOI (end of image) マーカ以降は無視されるので、最初の画像しか見えなくなるのではないでしょうか。
お礼
なるほど、変則的ですが、他のファイルを削除することによって 特定のファイルのZIPを作るという方法がありますね。 パイプで上手くいかない理由はたぶん、その通りだと思います。
補足
本当は「番号.jpg」が複数入ったZIPファイルを例えば ~999番→1.zip 1000番台→1000.zip 2000番台→2000.zip のように小さく分けたZIPファイルにしたいのです。 なので、削除する方法もあまりこの場合は効率的ではありません。 しかし、完璧な方法はないのかもしれませんね。
お礼
遅い返答ですみませんが・・・・ 最後のループする方法は思いつきませんでした。 これは使えそうです! ありがとうございました!!!