J'écris un script dans lequel je compresse des fichiers.
Il y a une possibilité que je puisse compresser un fichier, créer un fichier du même nom et essayer de le compresser également, par exemple
$ 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
En utilisant gzip --force
, je peux forcer gzip à écraser foo.gz
, mais dans ce cas, je pense qu'il y a de fortes chances que je puisse perdre des données si j'écrase foo.gz
. Il ne semble pas y avoir de commutateur de ligne de commande pour forcer gzip à laisser les .gz
fichiers seuls ... une version non interactive de la pression de 'n' à l'invite.
J'ai essayé gzip --noforce
et gzip --no-force
, en espérant que ceux-ci pourraient suivre la norme des options GNU, mais ni l'un ni l'autre n'a fonctionné.
Existe-t-il une solution simple à cela?
Éditer:
Il s'avère que c'est l'une des fois où il est payant de lire la page d'informations plutôt que la page de manuel.
Depuis la page info:
`--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.
Le texte manquait dans la page de manuel et lorsqu'elle n'était pas exécutée en arrière-plan
Lors de l'exécution en arrière-plan, gzip ne demandera pas et ne remplacera pas sauf si l' -f
option est invoquée.
find ./ ! -name "*gz" -exec gzip {} \; &
cela fonctionne:find ./ ! -name "*gz" -print0 | xargs -0 -n 1 -t gzip
gzip rapporte:gzip: ./2012-July.txt.gz already exists; not overwritten