Ich möchte eine Textdatei mit dem gzip-Kommandozeilen-Tool komprimieren und dabei die Originaldatei behalten . Führen Sie standardmäßig den folgenden Befehl aus
gzip file.txt
führt dazu, dass diese Datei geändert und umbenannt wird file.txt.gz
. Anstelle dieses Verhaltens möchte ich diese neue komprimierte Datei zusätzlich zu der vorhandenen haben file.txt
. Im Moment benutze ich den folgenden Befehl, um das zu tun
gzip -c file.txt > file.txt.gz
Es funktioniert, aber ich frage mich, warum es keine einfachere Lösung gibt, um eine solche gemeinsame Aufgabe zu erledigen. Vielleicht habe ich die Möglichkeit verpasst, das zu tun?
command-line
files
gzip
Manuel Selva
quelle
quelle
Antworten:
Informationen zu GNU
gzip
1.6 oder höher, FreeBSD und Derivaten oder neueren Versionen von NetBSD finden Sie in der Antwort von don_cristi .In jeder Version können Sie Shell-Umleitungen wie folgt verwenden:
Wenn kein Argument angegeben wird, wird
gzip
die Standardeingabe gelesen, komprimiert und die komprimierte Version in die Standardausgabe geschrieben. Als Bonus müssen Sie sich bei der Verwendung von Shell-Umleitungen keine Gedanken darüber machen, ob Dateien aufgerufen werden"--help"
oder"-"
(für letztere ist dies immer noch ein Problemgzip -c --
).Ein weiterer Vorteil
gzip -c file > file.gz
ist, dassfile
der Befehl fehlschlägt , wenn er nicht geöffnet werden kann, ohne dass ein leerer Befehl erstelltfile.gz
(oder ein vorhandener überschrieben wirdfile.gz
) und ohne dass er ausgeführt wirdgzip
.Ein wesentlicher Unterschied zu
gzip -k
obwohl ist, dass es keinen Versuch geben wird, diefile
Metadaten (Eigentum, Berechtigungen, Änderungszeit, Name der nicht komprimierten Datei) zu kopierenfile.gz
.Auch wenn es
file.gz
bereits existiert, wird es stillschweigend überschrieben, es sei denn, Sie haben dienoclobber
Option in Ihrer Shell aktiviert (set -o noclobber
zum Beispiel in POSIX-Shells).quelle
-c
.-k
Option? Konnte es nicht in den Manpages finden, zB diese Version hier linux.die.net/man/1/gzip . Außerdem sieht es so aus, als würde gzip standardmäßig die Metadaten der Datei kopieren.Beachten Sie, dass die kürzlich (Juni 2013) veröffentlichte Option "--keep (-k) für die Konsistenz mit Tools wie xz, lzip und bzip2 akzeptiert. Mit dieser Option entfernt gzip beim Komprimieren oder Dekomprimieren keine benannten Eingabedateien mehr" .
gzip-1.6
Auszug aus der Manpage:
Ab
1.6
jetzt können Sie die Originaldatei mit-k
oder--keep
behalten:(Beachten Sie, dass es nicht funktioniert, wenn
$file
ist-
(wasgzip
als stdin anstelle der eigentlichen aufgerufenen Datei interpretiert wird-
). In diesem Fall müssen Sie es auf ändern../-
)Diese Option wurde erstmals in der FreeBSD-Implementierung von
gzip
(in FreeBSD 7.0 im Jahr 2007) eingeführt, um die Konsistenz zu gewährleistenbzip2
. Dasgzip
basiert auf einer Neufassung von GNUgzip
durch NetBSD. Die-k
Option schaffte es 2010 schließlich zurück zu NetBSD .quelle
Aus der Dokumentation geht hervor, dass es keine Möglichkeit gibt, eine Kopie der Datei zu erstellen.
Sie können eine Shell-Funktion definieren
und dann
quelle
-
, als aufrufen müssengzipkeep ./-
.