
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プログラムを
使用してもいいです。
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)
などと、連続した番号を生成するのもありかなと思います。
遅い返答ですみませんが・・・・
最後のループする方法は思いつきませんでした。
これは使えそうです!
ありがとうございました!!!
No.1
- 回答日時:
zip -d src.zip "*" -xi "*.jpg"
これでどうでしょうか (InfoZIP の場合) src.zip から *.jpg 以外が削除されます (src.zip は変更されます)
unzip と zip を組み合わせてパイプでつなぐのは、うまくいかないと思います。
質問欄にも
> うまくいきません
とありますが、どううまくいかないのか書いてありませんので、以下は想像です。
zip は各ファイルを圧縮してからアーカイブするので (アーカイブ化したひとつのファイルを圧縮するわけではない) それぞれのファイル名とタイムスタンプ、アトリビュートなどの情報が必要だと思います。
それに、パイプで複数ファイルを渡すと、つながってしまいます。JPEG 画像の場合、最初の画像の EOI (end of image) マーカ以降は無視されるので、最初の画像しか見えなくなるのではないでしょうか。
この回答への補足
本当は「番号.jpg」が複数入ったZIPファイルを例えば
~999番→1.zip
1000番台→1000.zip
2000番台→2000.zip
のように小さく分けたZIPファイルにしたいのです。
なので、削除する方法もあまりこの場合は効率的ではありません。
しかし、完璧な方法はないのかもしれませんね。
なるほど、変則的ですが、他のファイルを削除することによって
特定のファイルのZIPを作るという方法がありますね。
パイプで上手くいかない理由はたぶん、その通りだと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#include <Windows.h>というヘ...
-
.NETアプリを作ったときの .man...
-
コマンドプロンプトで、指定し...
-
jarファイル
-
リンクの張り付けかたを教えて...
-
binファイルを解凍したいの...
-
Latexで図番号だけを「図1.1」...
-
ファイルが開かれているかどう...
-
「ブルーファイル」と「グリー...
-
監視ツールを入れさせられまし...
-
HEWのtoolchainの設定の確認方法。
-
C#でログファイルにファイルパ...
-
Doxygenで#includeのファイル内...
-
exeファイルの作り方
-
Access のファイルの「安全でな...
-
TIFFファイルを印刷できますか?
-
Batファイルをバイナリ形式にす...
-
CSSを1ページに1枚作るのって変...
-
公文書のxmlファイルの開き方が...
-
ファイル構造が破損しているフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
binファイルを解凍したいの...
-
アクセス 壊れた? 「ファイ...
-
コマンドプロンプトで作成日時...
-
#include <Windows.h>というヘ...
-
Latexで図番号だけを「図1.1」...
-
リンクの張り付けかたを教えて...
-
.NETアプリを作ったときの .man...
-
jarファイル
-
コマンドプロンプトで、指定し...
-
「営業秘密の漏洩」について
-
自分で作成した重要ファイルを...
-
warファイルをEclipseでプロジ...
-
公文書のxmlファイルの開き方が...
-
ストレージにある全てのファイ...
-
C言語---ファイルに出力したデ...
-
HTMLからのBATファイル実行
-
ファイルが開かれているかどう...
-
監視ツールを入れさせられまし...
-
「ブルーファイル」と「グリー...
-
バッチ処理で追記コピーしたい
おすすめ情報