Wie komprimiere ich Dateien direkt?

20

Ich habe eine Maschine mit 90% Festplattenauslastung. Ich möchte seine 500 Protokolldateien in eine kleinere neue Datei komprimieren. Die Festplatte ist jedoch zu klein, um sowohl die Originaldateien als auch die komprimierten Dateien zu speichern.

Ich muss also alle Protokolldateien nacheinander in eine einzelne neue Datei komprimieren und jedes einmal komprimierte Original löschen.

Wie kann ich das unter Linux machen?

Zen
quelle
Duplizieren: superuser.com/questions/378230
Hermann

Antworten:

18

gzipoder bzip2komprimiert die Datei und entfernt die nicht komprimierte automatisch (dies ist das Standardverhalten).

Beachten Sie jedoch, dass während des Komprimierungsvorgangs beide Dateien vorhanden sind.

Wenn Sie Protokolldateien komprimieren möchten (dh Dateien, die Text enthalten), können Sie dies vorziehen bzip2, da das Verhältnis für Textdateien besser ist.

bzip2 -9 myfile       # will produce myfile.bz2

Vergleich und Beispiele:

$ ls -l myfile
-rw-rw-r-- 1 apaul apaul 585999 29 april 10:09 myfile

$ bzip2 -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 115780 29 april 10:09 myfile.bz2

$ bunzip2 myfile.bz2

$ gzip -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 146234 29 april 10:09 myfile.gz

UPDATE, wie @Jjoao mir in einem Kommentar sagte, xzscheint interessanterweise das beste Verhältnis für einfache Dateien mit seinen Standardoptionen zu haben:

$ xz -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 109384 29 april 10:09 myfile.xz

Weitere Informationen finden Sie hier: http://binfalse.de/2011/04/04/comparison-of-compression/

Für das obige Beispiel verwende ich -9für ein optimales Komprimierungsverhältnis, aber wenn die zum Komprimieren von Daten erforderliche Zeit wichtiger ist als das Verhältnis, sollten Sie es besser nicht verwenden (verwenden Sie eine niedrigere Option, dh -1oder etwas dazwischen).

apaul
quelle
2
+1; Nur neugierig: könntest du eine hinzufügen xz myfile?
Joao
2
@ Joao danke! Es ist interessant, ich bin es nicht gewohnt xz, aber ich werde es jetzt prüfen. Siehe das Update meines Beitrags.
Apaul
3
Bitte tun Sie nicht xz -9. Es erhöht den für die Komprimierung / Dekomprimierung erforderlichen Speicher erheblich, ohne das Komprimierungsverhältnis wesentlich zu verbessern. Die Manpage sagt sogar (Betonung ihrer) "Insbesondere ist es keine gute Idee, blind -9 für alles zu verwenden, wie es oft bei gzip (1) und bzip2 (1) der Fall ist." Die Standardeinstellung xz -6ist gut genug und komprimiert sogar xz -0/ xz -1normalerweise besser als gzip -9.
user49740
@ user49740 du hast recht. Ich benutze es selten -9, aber ich habe es hier verwendet, da ich eine Art Benchmark für das Kompressionsverhältnis "in der gleichen Größenordnung" erstellen wollte. Aber auch hier haben Sie völlig Recht: Es ist eine schlechte Idee, sie blind zu benutzen -9.
6.
15

Ich habe selbst eine Teerlösung gefunden.
Einzelne Dateien werden gelöscht, nachdem sie in die Zieldatei komprimiert wurden.
Die Kompressionsgeschwindigkeit ist jedoch nicht sehr hoch. Der Befehl sieht folgendermaßen aus:

tar -zcvf my_log.tar.gz *.log --remove-files
Zen
quelle
1
Guter alter Teer. +1
Aaron Hall
1

Ergänzend zu @apaul betone ich, dass Dateien einzeln komprimiert werden

 bzip2 *.log.*

(Ersetzen Sie bzip2 durch gzip, xz oder was auch immer Ihre Lieblingsdatei zip ist) kann wichtig sein:

Auf diese Weise können Sie die komprimierte Datei weiterhin anzeigen ( bzcat file.bz2), durchsuchen ( bzgrep file.bz2), bearbeiten ( vi file.bz2) und bei Bedarf die älteren Dateien entfernen.

Joao
quelle
1

Ich habe versucht, dies auf der BSD-Version von tar zu tun. In diesem Fall ist die Option --remove-files nicht verfügbar. Am Ende habe ich Folgendes gemacht (und gearbeitet):

find folder_to_tar -type f -exec tar --append --file=output_tar_file.tar {} \; -exec rm -v {} \;
pgilmon
quelle
Die BSD-Version erhalten Sie übrigens standardmäßig, wenn Sie MacOS verwenden
pgilmon