Ich schreibe ein Skript, in dem ich Dateien komprimiere.
Es besteht die Möglichkeit, dass ich eine Datei komprimiere, eine Datei mit demselben Namen erstelle und versuche, diese ebenfalls zu komprimieren, z
$ 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
Mithilfe von gzip --force
kann ich das Überschreiben von gzip erzwingen. foo.gz
In diesem Fall besteht jedoch eine gute Chance, dass beim Überschreiben Daten verloren gehen foo.gz
. Es scheint keinen Befehlszeilenschalter zu geben, der gzip zwingt, .gz
Dateien in Ruhe zu lassen ... eine nicht interaktive Version des Drückens von 'n' an der Eingabeaufforderung.
Ich habe versucht gzip --noforce
und gzip --no-force
gehofft, dass diese dem GNU-Optionsstandard folgen, aber keiner von beiden hat funktioniert.
Gibt es eine direkte Umgehung dafür?
Bearbeiten:
Es stellt sich heraus, dass es sich oft lohnt, die Infoseite und nicht die Manpage zu lesen.
Von der Infoseite:
`--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.
Der Manpage fehlte der Text und wenn sie nicht im Hintergrund lief
Wenn gzip im Hintergrund ausgeführt wird, wird es nicht aufgefordert und nicht überschrieben, es sei denn, die -f
Option wird aufgerufen.
find ./ ! -name "*gz" -exec gzip {} \; &
funktioniert:find ./ ! -name "*gz" -print0 | xargs -0 -n 1 -t gzip
gzip meldet:gzip: ./2012-July.txt.gz already exists; not overwritten