Gnu / Linuxコマンドラインを使用してあるファイルを別のファイルに圧縮する

Gnu / Linuxコマンドラインを使用してあるファイルを別のファイルに圧縮する

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.gzgzipMyFileCompMyFile

答え3

デフォルトでは、目的のファイル名にリダイレクトできるようにgzip -c圧縮されています。STDOUTあなたが捜している反転はまたはを強制的に試みても(1.6 標準)なしで拒否されるzcatからです。gzip -dgunzip-f.gz

gzip -c MyFile > MyFileComp
zcat MyFileComp > MyFile

警告するMyFileすでに存在する場合は上書きされます。

関連情報