Windows版のgzipについて

このQ&Aのポイント
  • Windows版のgzipを使って情報を圧縮しようとすると解凍できない問題が発生しています。
  • ダンプ圧縮コマンドを試してみたが、解凍できないためテキストファイルを一度出力してから再度圧縮する必要がある。
  • 標準入力からの圧縮も試したが、解凍できない結果となった。シンプルに圧縮してみると解凍できることがわかったが、なぜかは不明。
回答を見る
  • ベストアンサー

Windows版のgzipについて

Windows版のgzipについて os:win xp-pro gzip「http://www.gzip.org/」 windows版で 標準入力からの情報を圧縮しようとするとおかしくなります。 以前にpostgresからのダンプ圧縮としてマニュアルに載っているコマンド(linux用)をWindowsでも出来ないかと質問させて頂いたところ、 gzipのWindows版を紹介して頂きました。 <ダンプ圧縮コマンド> pg_dump dbname | gzip > filename.gz <試行1> Windows版のgzipをインストール後、試してみました。 pg_dump.exe --host=localhost --username=postgres template1 | gzip.exe > C:?Temp?test_dump.gz しかし、C:?Temp?test_dump.gzを解凍できません。 一旦、テキストで出した後、改めて圧縮すると解凍できます。 pg_dump.exe --host=localhost --username=postgres template1 > C:?Temp?test_dump gzip.exe C:?Temp?test_dump <試行2> 一旦、postgresの事は忘れて、適当なテキストファイルを用意し、標準入力から圧縮しました。 type c:?temp?test.txt | gzip.exe > c:?temp?test.txt.gz 結果は、やはり解凍できません。 シンプルに圧縮してみました。 gzip.exe c:?temp?test.txt c:?temp?test.txt.gzを解凍する事ができました。 どうしたものでしょうか? 何かやり方が悪いのでしょうか?

  • ngwave
  • お礼率65% (240/366)

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

こちらでは、まったく再現しません。正常に動作しています。 正直、どうなってるかわかりません。 ・type c:\temp\test.txt | gzip.exe > c:\temp\test.txt.gz としたときの test.txt.gzをバイナリエディタで開いてみたり、 linuxにバイナリ転送→fileコマンドで識別してみたりして、どんな出力になっているかを確認する。 ・CygwinやMinGWを使ってみる 位しか思いつきません。 ・実験環境 XP SP3 32bit PATH=C:\WINDOWS;C:\WINDOWS\SYSTEM32 として、なるべく他の影響を遮断 ・実験内容 gzip -v9 ファイル (ファイルを置き換える) gzip -v9c ファイル > ファイル.gz (入力指定、標準出力へ) gzip -v9c < ファイル > ファイル.gz (標準入力から、標準出力へ) type ファイル | gzip -v9c > ファイル.gz (パイプから入力) の4つを実行。gzipはフルパスで指定。 ファイルにはgzip for Windwos 1.3.12のChangelog(テキスト)とgzip.exe(バイナリ)をリネームして使用 -l,-tオプションでの確認と、Cygwinのgzipを使用しての伸長後との比較 →すべての条件で-l,-t問題なし。伸長後も圧縮前と一致。 念の為、1.2.4, 1.3.12両方でやってみましたが、同じ結果でした。

ngwave
質問者

お礼

「こちらでは、まったく再現しません。正常に動作しています。」という回答に、もしやと思い、cmd.exeを起動し、そこから実行しました。 すると、うまくいきました。 書き忘れていましたが、Windows PowerShellから実行していました。 Windows PowerShellから・・・NG コマンドプロンプトから・・・OK という結果です。 type c:\temp\test.txt | gzip.exe > c:\temp\test.txt.gz をtest.batに保存し、 PowerShellからtest.batを実行すると正しく動作しました。 gzipというよりPowerShellの問題のようです。 わざわざ検証していただき、本当にありがとうございます。

その他の回答 (2)

  • happybsd
  • ベストアンサー率0% (0/1)
回答No.3

Unix 環境の cat 相当の処理をしたいのだと思いますが、 type は cat ではないのでバイナリファイルをうまく扱えず、 結果としてパイプを通して gzip に渡せていないように思います。 対策としては cat を使えるように cygwin や msys 環境を作るか、 単独で cat 相当のコマンドを導入することになります。 パイプに拘るのであれば、cygwin か msys を導入するのを提案します。

ngwave
質問者

お礼

ありがとうございます。 PowerShellから起動したのが悪かったようです。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

標準出力へ出力する -c オプションと、標準入力から入力を表わす - を付けたらどうなりますか? type c:\temp\test.txt | gzip.exe -c - > c:\temp\test.txt.gz

ngwave
質問者

補足

だめです。 同じ事になります。 gzip test.txt というシンプルな使いかた以外では全く成功しません。 ちなみに成功した場合は正しく解凍できますが、圧縮に失敗した場合、 test.txt.gz: not in gzip format となります。 左から入れられないなら、windowsにわざわざgzipを入れる意味が無いですし、どうしたものかという感じです。

関連するQ&A

  • postgresのlinux版でやっている事と同等の事をwindows

    postgresのlinux版でやっている事と同等の事をwindows版でやりたい! os:windows xp やりたい事は以下です。 圧縮して出力 $ pg_dump dbname | gzip > filename.gz 解凍のみ $ gunzip -c filename.gz 解凍してリストア $ gunzip -c filename.gz | psql dbname gzipがzipやlhaに変わってもOKです。 --format=c オプションで出力したファイルは解凍のみの方法が分かりませんでした。 圧縮ツールはwindowsの標準か追加モジュールが第一希望 第二希望はフリーソフトです。

  • gzipで圧縮されたファイルを伸張して保存

    gzipで圧縮されたファイル(sample.txt.gz)を伸張して「sample.txt」として保存し直したいのですが、スクリプト内でどういうふうに書けばいいのかわかりません。 gzipのパスは、#!/bin/gzip gunzip sample.txt.gz や gzip -d sample.txt.gz のコマンドを使うらしいことはわかったのですが、これをどうスクリプト中に書けばいいのか。。。 どなたかわかる方、教えてください。

    • ベストアンサー
    • Perl
  • UNIXで圧縮したgzipをWINDOWSで解凍する方法

    - UNIXで圧縮したgzip形式のファイルを、WINDOWS上で解凍して 使いたいのですが、解凍方法、若しくは、解凍ツールをご存知の方が いらっしゃいましたら、是非教えてください。 特に、gzip形式にこだわっている訳ではないので、UNIXで圧縮したファイルを WINDOWS上で解凍する方法でも構いません。 実際に使用するファイルは、ORACLEのインポートデータです。 どうぞ、どんなアドバイスでも結構です、宜しくお願いいたします。 -

  • grep と gawk

    たとえば圧縮ファイルを解凍して 必要のない行を排除して解凍後ファイルを作成する場合 (1)gunzip -c test.gz | gawk '!/\.txt*/' > test.txt (2)gunzip -c test.gz | grep -v '.txt' > test.txt 上記のコマンドではどちらが処理的にはやいのでしょうか? 自分で試すと(2)の方がはやかったです。 イメージ的にはgawkなんですけど・・・ 一般論とかあるんでしょうか?

  • tar.gzファイルのリストアについて

    Postgres初心者です。 教えてください。 pg_dumpコマンドでdump拡張しのバックアップファイルを生成し、 tarコマンドで****.tar.gzファイルに圧縮しました。 このtar.gzのファイルを直接リストアするコマンドがあれば 教えていただけないでしょうか? -bash-3.2$pg_restore -U postgres -d (データベース名) < ****.tar.gz と実行すると、以下のエラーメッセージが表示されます。 →pg_restore: [アーカイバ] 入力ファイルが有効なアーカイブではないようです。 -bash-3.2$gunzip -C ****.tar.gz | pg_restore -d (データベース名) と実行すると、以下のエラーメッセージが表示されます。 →pg_restore: [tarアーカイバ] tarアーカイブ内でファイルtoc.dat用のファイルヘッダがありませんでした よろしくお願い致します。

  • Windows版 pg_dumpの結果をログ取得

    お世話になっております。 Windows版のPostgreSQL8.1を使用しています。 Windowsのバッチファイルで毎週自動実行で pg_dumpによるバックアップを取得しようと思っています。 バックアップは正常に取得できるのですが、 どうしてもログファイルが出力できません。 手動でバッチを動かすと、プロンプトには表示が出ます。 『pg_dump: テーブル×××の内容をダンプしています』 のように。それをどうやったらファイルに残せるかを知りたいです。 実行しているコマンドは、 pg_dump.exe -f "DBバックアップファイル" -i -v -h ホスト名 -p ポート -U "ユーザ名" -F c "DB名">>"ログファイル名" としています。 以上です。宜しくおねがいします。

  • tar圧縮ファイルが作成できず困っています。

    tarとgzipをパイプでつなげて使用すると、tar圧縮ファイルが正常に 作成できず困っています。(Solaris) *やりたいこと* ファイル一覧test.txtに記載されているファイルを一度に tar圧縮したい。(tar・gzip別々でなく) *コマンドライン* # tar cvfp - -I test.txt | gzip -c > test.tar.gz a aaa.txt 1K a bbb.txt 1K a ccc.txt 1K # ls -l test.tar.gz(←とりあえずファイルは作られている) -rw-r--r-- 1 root other 33235 5月 12日 10:03 test.tar.gz # gunzip test.tar.gz(←unzipもできる) gunzip: /usr/bin/gzip has 2 other links -- unchanged # ls -l test.tar -rw-r--r-- 1 root other 64076 5月 12日 10:03 test.tar # file test.tar(←この時点でおかしい。file種別がアーカイブじゃない) test.tar: ELF 32-ビット MSB 実行可能 SPARC バージョン 1[動的にリンクされています][取り除かれています] # tar xvfp test.tar(←エラーになる) tar: ディレクトリの検査合計エラーです。 # /bin/tar xvfp test.tar(←違うtarでやってみるとエラーがでる) tar: This does not look like a tar archive tar: Skipping to next header tar: Archive contains obsolescent base-64 headers tar: Read 2636 bytes from test.tar tar: Error exit delayed from previous errors 上記のような現象になって困っています。パイプ以降をcompressに するとふつうにいけるので、gzipがおかしいような気もするのですが。 サイトを検索するとみなさんGNUのgtarをお勧めしているようですが そちらもだめでした。 どなたか解決策をご存知の方がいたらご教授願います。

  • Windowsでgzをコマンドラインにより解凍するには

    WindowsXP Proを使っています。 gzで圧縮されたファイルを定期的にコマンドラインにより解凍したいと思っています。調べてみると+Lhacaデラックス版が対応しているということ・コマンドラインから読み出せるということで使ってみましたが 「問題が発生したため、Lhaca.exeを終了します。ご不便をおかけしまして申し訳ありません。」のポップアップウィンドウが表示され終了してしまいます。3台違うPCでやりましたが、2台は同じ状況で、1台はVidual Studioデバッガが立ち上がりエラーが発生している様子です。 行いたい事はコマンドラインからgzを解凍したいだけなので、必ずしもLhacaを使う必要はありません。 ・コマンドラインからgzを解凍できるソフトはないか? ・対応しているはずのLhacaがなぜエラーが出るのか?対処方法は? いずれかご存知の方、ご教授ください。

  • pg_dumpではかれたテキストファイルを実行もデータの移行失敗

    DBを開発環境から、本番環境へ移行する際、pg_dumpではかれたデータを元に、pg_restoreで復元しようとした所、エラーが出て、うまくいかず。pg_dumpをtxt形式で出力させ、それを実行させました。 結論から言うとテーブルは全て作成されましたが、データの移行が出来ていませんでした。エラーは出ていませんが、COPYコマンドがうまくいっていないようでした。 開発環境がPostgres8.xで本番環境がPostgres7.4.3なのが影響している可能性が高いと判断してますが、どなたかわかる人はおりませんでしょうか。

  • gawkについて

    gzファイルを解凍しつつ、不必要なデータを取り除いて 別ファイルを作成したいと考えています。 gzファイルの内容はログなどが複数行です。 gzファイル:test.gz 新規ファイル:kekka.txt 不必要なデータは.html, .htmを含むレコードを取り除きたいと 思います。 gunzip -c test.gz | gawk '/.html/.htm/' > kekka.txt でいいのでしょうか?