Estoy escribiendo un script en el que estoy comprimiendo archivos.
Existe la posibilidad de que pueda comprimir un archivo, crear un archivo con el mismo nombre e intentar comprimir esto también, p. Ej.
$ 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
Al usar gzip --force, puedo forzar a gzip a sobrescribir foo.gz, pero en este caso, creo que hay una buena posibilidad de que pueda perder datos si sobrescribo foo.gz. No parece haber un cambio de línea de comando para forzar a gzip a dejar los .gzarchivos solos ... una versión no interactiva de presionar 'n' en el indicador.
Lo intenté gzip --noforcey gzip --no-force, con la esperanza de que estos pudieran seguir el estándar de opciones de GNU, pero ninguno de estos funcionó.
¿Existe una solución directa para esto?
Editar:
Resulta que esta es una de las veces que vale la pena leer la página de información en lugar de la página de manual.
Desde la página de información:
`--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.
En la página del manual faltaba el texto y cuando no se ejecutaba en segundo plano.
Cuando se ejecuta en segundo plano, gzip no aparecerá y no se sobrescribirá a menos que -fse invoque la opción.
fuente

find ./ ! -name "*gz" -exec gzip {} \; &esto funciona:find ./ ! -name "*gz" -print0 | xargs -0 -n 1 -t gzipinformes de gzip:gzip: ./2012-July.txt.gz already exists; not overwrittenRespuestas:
Me di cuenta de que la mejor manera de evitar el efecto no deseado es no pedirle al programa que realice el efecto no deseado. Es decir, simplemente no le diga que comprima un archivo si el archivo ya está presente en forma comprimida.
p.ej:
o más corto (ejecutar
truesi hay un archivo.gz, comprimir el archivo de lo contrario)fuente
poke a file.Lo más cercano que podría encontrar a un solo comando es lo siguiente:
El
yescomando imprimeyseguido de un salto de línea a stdout hasta que recibe una señal. Si tiene un argumento, lo imprimirá en lugar dey. En este caso, se imprimenhasta que gzip sale, cerrando así la tubería.Esto es equivalente a ingresar
nrepetidamente en el teclado; esto responderá automáticamente la preguntagzip: archive/foo.gz already exists; do you wish to overwrite (y or n)?En general, creo que es mejor no intentar comprimir los archivos si existe el archivo comprimido correspondiente; mi solución es más ruidosa, pero se ajusta a mis necesidades particulares de un reemplazo directo para el
gzipcomando, ubicado en un archivo de configuración.fuente
gzipsale2