.gz ファイル拡張子なしで gzip ファイルを作成するには?

.gz ファイル拡張子なしで gzip ファイルを作成するには?

元のファイル名を保持するgzip圧縮ファイルを作成したいと思います。たとえば、「example.txt」をgzipに圧縮すると、「example.txt.gz」の代わりに「example.txt」という名前のgzipファイルが出力されます。後続のコマンドを実行せずに1つのコマンドでこれを正常に実行できますかmv

ベストアンサー1

これはうまくいきません:

# echo Hello World > example.txt
# gzip < example.txt > example.txt # WRONG!
# file example.txt
example.txt: gzip compressed data, from Unix, last modified: Thu Mar 21 19:45:29 2013
# gunzip < example.txt
<empty file>

これは競争条件です。

# echo Hello World > example.txt
# dd if=example.txt | gzip | dd of=example.txt # still WRONG!
# gunzip < example.txt 
Hello World # may also be empty

問題は、> example.txt他のdd of=example.txtプロセスがファイルを読み取る機会がある前にファイルを殺すことです。したがって、明確な解決策がないため、これに固執する必要がありますmv

あなたはいくつかの方法で欺くことができます。ファイルを開いてからリンクを解除できます。ファイルは閉じるまで存在し続けます。その後、同じ名前の新しいファイルを作成し、gzipで圧縮されたデータをここに書き込むことができます。しかし、私はbashがそれを使用することを強制する確実な方法を知りません。

これをしないでください。

何らかの理由で失敗したり、gzipgzip圧縮中にスペースが不足するなどの問題が発生した場合(他のプロセスが書き込んでいる場合、またはgzipの結果が入力より大きいため、これは任意のデータで発生しますなど)、ファイルが失われます。おめでとうございます!

別のファイルを作成してmv成功しました。これはあなたが見つけることができる最も簡単で、理解しやすく、最も信頼できる方法です。

おすすめ記事