を維持しながらgzipコマンドラインツールを使用してテキストファイルを圧縮したい元のファイル。デフォルトでは、次のコマンドを実行します
gzip file.txt
このファイルを変更し、名前をfile.txt.gz
に変更します。この動作の代わりに、この新しい圧縮ファイルを既存のivid = “a3d6aad963″に追加します。 >
。今のところ、次のコマンドを使用してこれを実行しています
gzip -c file.txt > file.txt.gz
動作しますが、このような一般的なタスクを実行するためのより簡単な解決策がないのはなぜですか?たぶん私はそれを行うオプションを逃しましたか?
コメント
- これは、gzipが指定されたファイルを圧縮して新しいファイルを作成するためです。圧縮とは、元のファイルを圧縮して新しいファイルに置き換えることを意味します。 " -c "オプションは、gzipに他の名前で保存するように明示的に指示しています。その'それが機能する理由
- @SHW 'コメントがありません…?
- @ManuelSelva元のファイルが圧縮されると、'は不要になります。それが設計だったと思います。
- gzip / gunzipを使用する理由他のUNIXツールがこれを実行しない場合は、デフォルトでこれを実行してください。
回答
GNU gzip
1.6以降、FreeBSDおよびその派生物またはNetBSDの最近のバージョンについては、を参照してください。 don_cristiの回答。
どのバージョンでも、次のようにシェルリダイレクトを使用できます。
gzip < file > file.gz
指定されていない場合引数があれば、gzip
は標準入力を読み取り、圧縮して、圧縮バージョンを標準出力に書き込みます。ボーナスとして、シェルリダイレクトを使用する場合、ファイルについて心配する必要はありません。 "--help"
または"-"
と呼ばれます(後者はまだgzip -c --
)の問題です。
gzip -c file > file.gz
のもう1つの利点は、file
を開くことができません。空のfile.gz
を作成せずに(または既存のfile.gz
を上書きせずに)コマンドが失敗し、 gzip
をまったく実行せずに。
gzip -k
と比較した場合の大きな違いは、 file
のメタデータ(所有権、権限、変更時刻、非圧縮ファイルの名前)をfile.gz
にコピーします。
また、file.gz
がすでに存在する場合、シェルでnoclobber
オプションをオンにしない限り、サイレントにオーバーライドされます(set -o noclobber
たとえばPOSIXシェル)。
コメント
- これで、OP
の質問と回答neral question "元のファイルを保持するようにgzipに指示する方法"。 -c
よりも非常に便利で便利です。
-k
オプション? 'マニュアルページで見つかりませんでした。例:このバージョンは linux.die.net/man/1/gzip です。また、gzipはデフォルトでファイル'のメタデータをコピーしているようです。cat file | gzip > file.gz
回答
最近(2013年6月)に注意してください)リリースされた gzip-1.6
"は–keepを受け入れます(-k)オプション、xz、lzip、bzip2などのツールとの一貫性を保つため。このオプションを使用すると、gzipは" を圧縮または解凍するときに名前付き入力ファイルを削除しなくなりました。
マニュアルページからの抜粋:
-k --keep Keep (don"t delete) input files during compression or decompression.
したがって、1.6
の時点で、-k
または--keep
元のファイルを保持するには:
gzip -k -- "$file"
($file
が
(gzip
は、-
<という実際のファイルではなく stdin を意味すると解釈します。
)、その場合は、./-
)
そのオプションはに変更する必要があります。 bzip2
との一貫性を保つために、gzip
(2007年のFreeBSD 7.0)のFreeBSD実装で最初に導入されました。 = “364395b9e0″>
は、NetBSDによるGNU gzip
の書き直しに基づいています。 -k
オプションは最終的にNetBSDに戻りました2010年。
コメント
- そうですね。 RHEL6にはベースにzip1.3.12のみが付属しています…
- これはMac / OS Xで動作します:)(BSD)
-
= 1.6もう?回答に更新が必要かどうか疑問に思います
- "-"の目的は何ですか? gzip -k " file "は正常に機能すると思います。
- @notilas unix.stackexchange.com/q/11376/22142