MyFile
という名前のテキストを含むファイルをインポートして、同じディレクトリにあるファイルに圧縮しようとしています。MyFileComp
私は試した:
gzip MyFile | touch MyFileComp
gzip MyFile >> MyFileComp
どちらのコマンドもcreateですMyFileComp
が、ファイルを開くと空です。ファイルを解凍しようとすると、不明なサフィックスが表示されます。これが何を意味するのかわかりません。
どんな助けでも大変感謝します。ありがとう
答え1
圧縮をしっかりしなかったようですね。 -cを使用してstdoutに送信し、最後に「.gz」を追加します。これは問題ですか?
gzip -c MyFile > MyFileComp.gz
gzip -d MyFileComp.gz
答え2
デフォルトでは、このツールはコマンドラインで指定された名前のファイルを圧縮すると、ファイル名のgzip
サフィックスが付いたファイルを生成します。.gz
同様に、uncompress a fileを使用してgzip -d
コマンドラインで圧縮ファイル名を指定すると、ファイル名の末尾.gz
にサフィックスがあると予想され、そのサフィックスを削除して圧縮されていないデータのファイル名を作成します。
この動作に従わない場合、つまり圧縮ファイルにファイル名サフィックスを使用せずにファイルを解凍したい場合は、コマンドラインでgzip -d
ファイル名を指定することはできませんgzip
。代わりにgzip
標準入力から読み込み、標準出力に書き込みます。
圧縮:
gzip <my_file >my_compressed_file
解凍:
gzip -d <my_compressed_file >my_file
技術的には、-c
上記の2つのコマンドと一緒に使用する必要がありますgzip
が、コマンドラインにファイル名が指定されていないため、とにかくstdinから読み取ってstdoutに書き込み、そのストリームは提供されたとおりにリダイレクトされます。
また、上記の2つのコマンドの場合、ソースデータ(圧縮コマンドのソースか圧縮解除コマンドのソースか)はそのまま保持されますが、gzip
ツールを通常どおり使用する場合は、コマンドラインでは通常-k
()オプションを使用しないとソースファイルが削除されます。--keep
注文
gzip MyFile | touch MyFileComp
これら2つのコマンドを互いにgzip MyFile
独立して実行します。touch MyFileComp
パイプにはデータは書き込まれずgzip
、データがあってもtouch
読み込まれません。最終的に圧縮されたファイルが呼び出され、空のMyFile.gz
ファイルが呼び出されますMyFileComp
(ファイルがまだ存在していないと仮定)。ファイルがMyFile
削除されます。
注文
gzip MyFile >> MyFileComp
以前と同じように圧縮し、MyFile
標準出力に何も記録しないため、空のファイルが生成されます(まだ存在しないと仮定)。ファイルが削除されます。MyFile.gz
gzip
MyFileComp
MyFile
答え3
デフォルトでは、目的のファイル名にリダイレクトできるようにgzip -c
圧縮されています。STDOUT
あなたが捜している反転はまたはを強制的に試みても(1.6 標準)なしで拒否されるzcat
からです。gzip -d
gunzip
-f
.gz
gzip -c MyFile > MyFileComp
zcat MyFileComp > MyFile
警告する:MyFile
すでに存在する場合は上書きされます。