Estou escrevendo um script no qual estou compactando arquivos.
Existe a possibilidade de eu poder compactar um arquivo, criar um arquivo com o mesmo nome e tentar compactá-lo também, por exemplo
$ 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
Ao usar gzip --force, posso forçar o gzip a sobrescrever foo.gz, mas nesse caso, acho que há uma boa chance de que eu possa perder dados se sobrescrever foo.gz. Não parece haver uma opção de linha de comando para forçar o gzip a deixar os .gzarquivos em paz ... uma versão não interativa de pressionar 'n' no prompt.
Eu tentei gzip --noforcee gzip --no-force, esperando que isso seguisse o padrão de opções do GNU, mas nenhum deles funcionou.
Existe uma solução alternativa direta para isso?
Editar:
Acontece que essa é uma das vezes que vale a pena ler a página de informações em vez da página de manual.
Na página de informações:
`--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.
Faltava o texto na página de manual e quando não estava em execução em segundo plano
Quando executado em segundo plano, o gzip não será solicitado e não será substituído, a menos que a -fopção seja invocada.
find ./ ! -name "*gz" -exec gzip {} \; &isso funciona:find ./ ! -name "*gz" -print0 | xargs -0 -n 1 -t gziprelatórios gzip:gzip: ./2012-July.txt.gz already exists; not overwritten