- ベストアンサー
Windows版のgzipについて
- Windows版のgzipを使って情報を圧縮しようとすると解凍できない問題が発生しています。
- ダンプ圧縮コマンドを試してみたが、解凍できないためテキストファイルを一度出力してから再度圧縮する必要がある。
- 標準入力からの圧縮も試したが、解凍できない結果となった。シンプルに圧縮してみると解凍できることがわかったが、なぜかは不明。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こちらでは、まったく再現しません。正常に動作しています。 正直、どうなってるかわかりません。 ・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両方でやってみましたが、同じ結果でした。
その他の回答 (2)
- happybsd
- ベストアンサー率0% (0/1)
Unix 環境の cat 相当の処理をしたいのだと思いますが、 type は cat ではないのでバイナリファイルをうまく扱えず、 結果としてパイプを通して gzip に渡せていないように思います。 対策としては cat を使えるように cygwin や msys 環境を作るか、 単独で cat 相当のコマンドを導入することになります。 パイプに拘るのであれば、cygwin か msys を導入するのを提案します。
お礼
ありがとうございます。 PowerShellから起動したのが悪かったようです。
- kmee
- ベストアンサー率55% (1857/3366)
標準出力へ出力する -c オプションと、標準入力から入力を表わす - を付けたらどうなりますか? type c:\temp\test.txt | gzip.exe -c - > c:\temp\test.txt.gz
補足
だめです。 同じ事になります。 gzip test.txt というシンプルな使いかた以外では全く成功しません。 ちなみに成功した場合は正しく解凍できますが、圧縮に失敗した場合、 test.txt.gz: not in gzip format となります。 左から入れられないなら、windowsにわざわざgzipを入れる意味が無いですし、どうしたものかという感じです。
お礼
「こちらでは、まったく再現しません。正常に動作しています。」という回答に、もしやと思い、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の問題のようです。 わざわざ検証していただき、本当にありがとうございます。