ZIPファイルの特定のファイルのみ抽出してZIP作成方法

このQ&Aのポイント
  • ZIPファイル内の特定のファイルのみ抽出してZIPファイルを作成
  • パイプやコマンドを使ってうまくできないか
  • WindowsXPで使用する特定のZIPプログラムを使っても良い
回答を見る
  • ベストアンサー

ZIP内の特定のファイルのみ抽出してZIP作成

ZIPファイル内の特定のファイルのみ抽出してZIPファイルを作成 したいのですが、パイプ等を使ってうまくできないでしょうか? 次のようにコマンドをいくつかあわせればとりあえず出来るのですが… mkdir temp unzip src.zip *.jpg -d temp cd temp zip -m ..\dst.zip * もっとよい方法をご存知の方がいましたらご教授願います。 次のようにも試してみたのですが、うまくいきませんでした。 unzip -p src.zip *.jpg | zip dst.zip - OSはWindowsXPです。 ZIPプログラムは必要であれば特定のZIPプログラムを 使用してもいいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • micari
  • ベストアンサー率85% (12/14)
回答No.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) などと、連続した番号を生成するのもありかなと思います。

iwashimizu
質問者

お礼

遅い返答ですみませんが・・・・ 最後のループする方法は思いつきませんでした。 これは使えそうです! ありがとうございました!!!

その他の回答 (1)

  • micari
  • ベストアンサー率85% (12/14)
回答No.1

zip -d src.zip "*" -xi "*.jpg" これでどうでしょうか (InfoZIP の場合) src.zip から *.jpg 以外が削除されます (src.zip は変更されます) unzip と zip を組み合わせてパイプでつなぐのは、うまくいかないと思います。 質問欄にも > うまくいきません とありますが、どううまくいかないのか書いてありませんので、以下は想像です。 zip は各ファイルを圧縮してからアーカイブするので (アーカイブ化したひとつのファイルを圧縮するわけではない) それぞれのファイル名とタイムスタンプ、アトリビュートなどの情報が必要だと思います。 それに、パイプで複数ファイルを渡すと、つながってしまいます。JPEG 画像の場合、最初の画像の EOI (end of image) マーカ以降は無視されるので、最初の画像しか見えなくなるのではないでしょうか。

iwashimizu
質問者

お礼

なるほど、変則的ですが、他のファイルを削除することによって 特定のファイルのZIPを作るという方法がありますね。 パイプで上手くいかない理由はたぶん、その通りだと思います。

iwashimizu
質問者

補足

本当は「番号.jpg」が複数入ったZIPファイルを例えば ~999番→1.zip 1000番台→1000.zip 2000番台→2000.zip のように小さく分けたZIPファイルにしたいのです。 なので、削除する方法もあまりこの場合は効率的ではありません。 しかし、完璧な方法はないのかもしれませんね。

関連するQ&A

  • zip書庫の仕様

    unzip32.dllなどのdllを用いずにzip書庫の情報を得るプログラムを作りたいと思います。 そこでzip書庫の仕様を探したのですが見つかりませんでした。 ハフマン圧縮や辞書圧縮に関する基礎知識はあります。 Info-ZIPのunzipコマンドのソースを読もうとしましたが、マルチプラットホームの記述が多すぎて挫折しました。 どこかにzip書庫の仕様について記述しているサイトあるいは書籍はありませんか?

  • パスワード付きzipファイルをバッチで解凍

    パスワード付きzipファイルをWindowsXP端末で バッチ(コマンドライン)から解凍する方法は無いでしょうか。 プログラム(c言語かコマンドプロンプトの予定)を実行すると、 ユーザの操作無しにzip解凍して、ファイル処理させたいと思っています。

  • zip書庫ファイルの見方がわかりません

    よろしくおねがいします。 os:windows xp personal インターネット掲示板に記載されたURLからZIPファイルをダウンロードしたところ、象のアイコンのZIP書庫ファイルができました。 このアイコンをダブルクリックすると「UNZIP32.DLLが組み込まれていません!」というエラーメッセージがでます。 でも、アイコンを右クリックしてエクスプローラを選択すると中のフォルダがみえて、さらにフォルダを右クリックしてエクスプローラを選ぶと中のjpg画像が見れます。(jpg画像のプロパティでは非圧縮となっています。) これは、ダウンロードと同時に解凍されたからでしょうか?自己解凍ファイルは拡張子がexeになると聞いたのですが・・・・ それとも、zipファイルは解凍せずに中身が見れるのでしょうか? また、圧縮ファイルに偽装exeが仕掛けられていることがあると聞きますが、意味が分りません。 これは、zipファイルの中にexeファイルが入っているということでしょうか?それとも、拡張子自体を偽装しているのでしょうか? 拡張子は表示するように設定していますが、目で見て分るものなのか不安です。

  • zipファイルを(DOSコマンドで)一気に解凍したい

    フォルダ内にたくさんの.ZIPファイルがあるのですが、一個ずつダブルクリックして解凍(Lhasa)するのは面倒なので、DOSコマンドより一気に解凍したいのですが、解凍するコマンドは標準では装備していないのでしょうか? DOSのLHAやUNZIPを入れないと駄目でしょうか?

  • zipファイル

    全くド素人な質問で恐縮なんですが、zipファイルを展開しようとしてプロパティ~規定のプログラムから開く~windowsフォトギャラリ- としたところ全てのzipファイルがwindowsフォトギャラリ-のアイコンにかわってしまい当然展開も出来なくなりました。スタートメニューの既定のプログラムから<あるファイルの種類を特定のプログラムから開く>などいろいろ試しましたがもとに戻りません。どなたかご存じの方いらっしゃれば教えて欲しいのですが。

  • ZIP圧縮やLHA圧縮されたファイルをプラグインにしたい

    ZIP型式やLHA型式で圧縮されたファイルをUNZIP32.DLLやUNLHA32.DLLで、プログラムのプラグインとしてつかう為には、どんな関数を使えば良いのでしょうか? 宜しければご教授ください。

  • 特定の行を抽出したい

    UNIXのコマンドで、 タブ区切りファイルの特定のカラム(5番目のカラム)だけを、 特定の条件(2番目のカラムが09か10で始まる)で 抽出したいのですが、可能でしょうか?

  • ファイル名が8文字のものを抽出したい。

    ファイル名が8文字(拡張子を含めると12文字)のものを抽出しようと思い、 Dir ????????.jpg /S としたら、8文字以下のものも抽出されました。 ジャスト8文字のものを抽出するいい方法はありますか。 方法はコマンドプロンプトでなくてもいいです。(コマンドプロンプト以外に文字数の指定方法を知らないから使っただけ) サブフォルダも抽出したいです。 最終的には、いるものだけバックアップを取って、消したいです。(8文字以外のものは消えたら困る) 消す方法もお願いします。 なお、プログラムが必要ならいりません。手作業の方が早いと思われるので。

  • ZIPファイルの検索

    Windowsのcmdかpsで、 対象フォルダ内(サブフォルダ含む) にて、特定の名前のファルが圧縮されているZIPファイルを探すコマンドを探しています が、なかなか見つからず、、、 手詰まりとなってしまったので、すみませんがご教授いただけないでしょうか

  • フォルダ階層のあるzipファイルで全ファイルを抽出

    こんにちは 日々のちょっとした作業が煩わしくて、自動化できないかと思い質問します。 仕事で毎日、何度となく zip ファイルを受け取ります。このzipファイルは次のような階層になっています。 パターン1: base.zip -folder1 --folder2 ---folder3 ----workfile.txt パターン2: base.zip -folder1 --folder2 ---folder3 ----folderA -----workfileA.txt ----folderB -----workfileB.txt ----folderC -----workfileC.txt 必要なのは、パターン1の場合は workfile.txt、パターン2の場合は workfileA|B|C.txt です。毎日このフォルダ階層をたどって、最後のファイルをコピーしてまた元のディレクトリに戻ってペーストしています。パターン2の場合も、最後のA|B|Cファイルを元の同じ1つのディレクトリに並べてコピーしています(foldrA|B|Cに分かれていても関係ない、ということです)。 こうした作業を自動化する方法はないでしょうか。 7-zip アプリケーションは導入しています。 おそらく、考え方としては、zip 内にある「フォルダ以外」=「ファイル」を、そのzipファイルと同じディレクトリにすべて展開する、というスクリプトになると思います。 7-zip あたりのコマンドラインをbatファイルでこねくり回すとできるのか、zip をフォルダとして展開した後、batかwshスクリプトでぐるぐる回すのか、どうしたらよいかわかりません。 どなたかお知恵を貸してください。よろしくお願いします。

専門家に質問してみよう