Also muss ich ein Verzeichnis mit maximaler Komprimierung komprimieren.
Wie kann ich das machen xz
? Ich meine, ich werde auch brauchen, tar
weil ich ein Verzeichnis nicht nur mit komprimieren kann xz
. Gibt es einen Oneliner zum Beispiel zu produzieren foo.tar.xz
?
directory
tar
compression
LanceBaynes
quelle
quelle
man 1 xz
sagtit's not a good idea to blindly use -9 for everything like it often is with gzip(1) and bzip2(1).
-7 ... -9 [...] These are useful only when compressing files bigger than 8 MiB, 16 MiB, and 32 MiB, respectively.
RTFM für weitere Informationen.Antworten:
Unter
xz
der Annahme, dass der Standardsatz von Befehlszeilenflags eingehalten wird - einschließlich Flags für die Komprimierungsstufe - können Sie Folgendes versuchen:quelle
-9e
ist das beste Level, aber es wird sehr lange dauern-9e
liefert--threads=0
Mit einer aktuellen GNU
tar
auf Bash oder abgeleiteten Shell:Tars J-Schalter in Kleinbuchstaben verwendet bzip, der J-Schalter in Großbuchstaben verwendet xz.
Mit der
XZ_OPT
Umgebungsvariablen können Siexz
Optionen festlegen , die nicht über aufrufende Anwendungen wie ztar
.Das ist jetzt maximal .
Siehe
man xz
weitere Optionen können Sie einstellen (-e
/--extreme
könnte Ihnen einige zusätzliche Kompression Nutzen für einige Datensätze).quelle
rc
undakanga
.fish
,csh
,tcsh
Undes
die großen Schalen ist , dass sie nicht unterstützen. Dort würden Sie denenv
Befehl verwenden.-9
und-e
xz entscheidet, wollen SieXZ_OPT=-e9
aber als @krzyk wies darauf hin, -e ist extrem langsamXZ_OPT
Ist kein Feature implementiert intar
. Es ist ein Merkmal vonxz
. Beimtar
Aufrufxz
wird die env-Variable einfach weitergereicht.ist noch besser als
quelle
option -e, --extreme
Ändern Sie die Komprimierungsvorgabe (-0 ... -9), damit ein etwas besseres Komprimierungsverhältnis erzielt werden kann, ohne die Speichernutzung des Kompressors oder Dekomprimierers zu erhöhen (Ausnahme: Die Speichernutzung des Kompressors kann mit den Vorgaben -0 ... -2). Der Nachteil ist, dass sich die Komprimierungszeit drastisch erhöht (sie kann sich leicht verdoppeln).-9
nicht verwenden-9e
, ja?XZ_OPT="-9e -T0" tar -cJf ...
Wenn Sie 16 GB RAM haben (und nichts anderes läuft), können Sie versuchen:
Für die Dekomprimierung werden 1,5 GiB benötigt, für die Komprimierung etwa das 11-fache. Passen Sie dies bei geringerem Speicherbedarf entsprechend an.
Dies wird helfen , nur dann , wenn die Daten tatsächlich so groß ist, und in jedem Fall wird es nicht helfen , DASS viel, aber immer noch ...
Wenn Sie Binärdateien komprimieren, fügen Sie --x86 als erste xz-Option hinzu. Wenn Sie mit "Multimedia" -Dateien spielen (unkomprimiertes Audio oder Bitmaps), können Sie es mit --delta = dist = 2 versuchen (experimentieren Sie mit Wert, gute Werte sind 1..4).
Wenn Sie sehr abenteuerlustig sind, können Sie versuchen, mit mehr LZMA-Optionen zu spielen, wie z
(Dies sind die Standardeinstellungen. Sie können Werte zwischen 0 und 4 ausprobieren, und lc + lp dürfen 4 nicht überschreiten.)
Um zu sehen, wie die Standardvorgaben diesen Werten zugeordnet sind, können Sie die Quelldatei src / liblzma / lzma / lzma_encoder_presets.c überprüfen. Nichts von großem Interesse (-e setzt die schöne Länge auf 273 und passt auch die Tiefe an).
quelle
Sie könnten verschiedene Optionen ausprobieren, für mich funktioniert -4e besser
Ich habe getestet mit:
Es scheint also, dass die Option -4e ein bisschen besser funktioniert als -9e.
quelle
no difference = 660 4e better than 9e = 74 9e better than 4e = 17 total files = 751 tar 2 html 2 csv 2 xml 2 gz 2 ppt 2 eps 2 docx 2 gif 2 rpm 3 png 3 asv 3 xlsx 3 exe 3 rar 4 nc 4 txt 5 odt 6 xls 7 zip 7 doc 9 m 12 dat 17 other 109 pdf 133 135 jpg 270
txt 109 txt/pdf 135
tar
Verwendung von Dateien zu bestimmenxz
.tar --help
:-I, --use-compress-program=PROG
auch mit externen Kompressoren komprimieren:
externe Kompressoren dekomprimieren:
Liste Archiv externe Kompressoren:
quelle
-I
hinzugefügt würde.tar
Befehl verwendetJ
Flag für XZ-Dateien. Ein Beispiel:tar -cJvf foo.tar.xz foo/
quelle
J
wurde bereits in bdownings Antwort erwähntFür die Interessenten
-e9
ist 0,4% kleiner, 20% langsamer bei der Komprimierung, 3% langsamer bei der Dekomprimierung im Vergleich zu-9
einem typischen Laptop. Das Timing wird in der Python-Quellcodeverzeichnisstruktur ausgeführt.Kompression:
Dekompression:
Dateigröße:
quelle
Dies ist keine exakte Antwort auf Ihre Frage, aber Sie können einen Befehl anstelle von zwei verwenden:
fügt alle Dateien aus dem Verzeichnis "dir1" mit "ultras ettings" zum Archiv archive.7z hinzu
Andere unterstützte Formate sind: zip, gzip, bzip2 oder tar. dafür einfach
7z
nach ersetzen-t
.--Quelle
man 7z
HINWEIS: nicht verwenden Sie diesen Befehl zur Sicherung Ihrer Systemdateien außer persönlichen Dateien , weil das Format 7z nicht Dateisystem Berechtigungen speichern .
quelle
Überprüfen Sie auf einem Multicore-Rechner ab Version 5.2.0 von xz-utils Folgendes:
Wenn Sie die maximale Anzahl von Kernen und die maximale Komprimierung verwenden möchten:
Oder setzen Sie -T auf die Anzahl der Kerne, die Sie verwenden möchten.
Dann:
Dies kann auch nützlich sein, um die Komprimierungsstufe zu wählen:
https://catchchallenger.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO
quelle
Wenn Sie möchten, dass dies schneller abgeschlossen wird, wenn Sie mehrere Threads verwenden, Ihr System jedoch nicht verlangsamen, während Sie andere Arbeiten ausführen, fügen Sie hinzu,
-Tn
wo n wie viele Threads verwendet werden sollen,nice
und stufen Sie die Komprimierung auf Leerlaufpriorität herab.Modell (für 4 Fäden):
Versuchen Sie es in
top
oderhtop
wenn Sie dies in einem großen Verzeichnis (mehrere GB) tun. Sie sollten hoffentlich mehrerexz
Threads mit dem Nizza-Wert 19 (niedrigste Priorität) sehen.Ich habe dies auch so knapp wie sinnvoll gestrippt, wie zum Beispiel: Die
-f -
in anderen Antworten wird einfach nicht benötigt, datar
die Standardausgabe stdout ist.Sie können
nice
den Teer auch verarbeiten, aber ich habe es nie für notwendig befunden, daxz
die CPU für die Pipeline immer zu eng wird.Praktische Anmerkung, ich benutze selten
xz -9
für irgendetwas, nicht so sehr wegen der CPU oder Zeit, sondern wegen des hohen Speicherbedarfs. Schauen Sie sich https://catchchallenger.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO#Memory_requirements_on_compression an . Derxz
Kompressor verwendet imbzip2
Gegensatz dazugzip
mehr Speicher für höhere Kompressionsfaktoren. Zusammengenommenxz
verbraucht dies weitaus mehr Speicher als jeder andere Kompressor. Sie können problemlos mehr als 600 MB Speicher verwenden. Wenn Sie die-T
Thread-Komprimierung aktivieren, steigen die Speicheranforderungen noch weiter. Beachten Sie Folgendes: Wenn Sie einen kleinen Dienst auf einer kleinen VM mit 1 bis 2 GB Arbeitsspeicher ausführen, kann dies versehentlich zu Beeinträchtigungen führen.quelle
Unter Mac OS X besteht eine alternative
tar
Möglichkeit, den Parameter mit zu übergeben, darin, ein--options=
Flag zu verwenden. Zum Beispiel,quelle