ファイルをgzip圧縮するスクリプトを書いています。
ファイルを圧縮し、同じ名前のファイルを作成し、これもgzipしようとする可能性があります。例えば
$ ls -l archive/
total 4
-rw-r--r-- 1 xyzzy xyzzy 0 Apr 16 11:29 foo
-rw-r--r-- 1 xyzzy xyzzy 24 Apr 16 11:29 foo.gz
$ gzip archive/foo
gzip: archive/foo.gz already exists; do you wish to overwrite (y or n)? n
not overwritten
を使用するとgzip --force
、gzipを強制的に上書きできますfoo.gz
が、この場合、上書きするとデータが失われる可能性が高いと思いますfoo.gz
。gzipに.gz
ファイルをそのままにするコマンドラインスイッチがないようです...プロンプトで「n」を押す非対話型バージョンです。
私が試したgzip --noforce
とgzip --no-force
、これらは標準GNUオプションに続くかもしれないことを期待して、どちらもこれらの働いていました。
このための簡単な回避策はありますか?
編集:
これは、manページではなくinfoページを読むことで支払う時間の1つであることがわかります。
情報ページから:
`--force'
`-f'
Force compression or decompression even if the file has multiple
links or the corresponding file already exists, or if the
compressed data is read from or written to a terminal. If the
input data is not in a format recognized by `gzip', and if the
option `--stdout' is also given, copy the input data without
change to the standard output: let `zcat' behave as `cat'. If
`-f' is not given, and when not running in the background, `gzip'
prompts to verify whether an existing file should be overwritten.
マニュアルページにテキストが欠落しており、バックグラウンドで実行されていない場合
バックグラウンドで実行する場合、gzipはプロンプトを表示せず、-f
オプションが呼び出されない限り上書きしません。
find ./ ! -name "*gz" -exec gzip {} \; &
これは動作します:find ./ ! -name "*gz" -print0 | xargs -0 -n 1 -t gzip
gzipレポート:gzip: ./2012-July.txt.gz already exists; not overwritten