gzipコマンドラインツールを使用してテキストファイルを圧縮したいです。維持する元のファイル。デフォルトでは、次のコマンドが実行されます。
gzip file.txt
その結果、ファイルが変更され、名前が変更されますfile.txt.gz
。この新しい圧縮ファイルを次の場所に配置したいと思います。次へ追加既存のfile.txt
。これでこれを行うには、次のコマンドを使用しています。
gzip -c file.txt > file.txt.gz
それはうまくいきますが、なぜそれほど一般的な作業のためのより簡単な解決策がないのだろうか。たぶん私はこれを行うオプションを逃したのでしょうか?
ベストアンサー1
GNU gzip
1.6以降、FreeBSD、およびその派生製品、または最新バージョンのNetBSDについては、以下を参照してください。ドンクリスティの答え。
どのバージョンでも、次のようにシェルリダイレクトを使用できます。
gzip < file.txt > file.txt.gz
引数が指定されていない場合は、標準入力が読み取らgzip
れ圧縮され、圧縮されたバージョンが標準出力に書き込まれます。追加ボーナスとして、シェルリダイレクトを使用するときに"--help"
名前またはファイルを心配する必要はありません"-"
(後者はまだ問題ですgzip -c --
)。
もう1つの利点gzip -c file.txt > file.txt.gz
は、開けない場合は空のコマンドを作成せず(または既存のコマンドを上書きせずに)、file.txt
コマンドが失敗してまったく実行されないことです。file.txt.gz
file.txt.gz
gzip
これと比較して1つの重要な違いgzip -k
はfile.txt
、メタデータ(所有権、権限、変更時間、圧縮されていないファイル名)ですfile.txt.gz
。
また、すでに存在する場合は、シェル(POSIXシェルなど)でオプションを設定しfile.txt.gz
ない限り、自動的に上書きされます。noclobber
set -o noclobber