NAMN
- Provided by: xz-utils (Version: 5.8.3-1)
- Report a bug
xz [flagga…] [fil…]
unxz är ekvivalent med xz --decompress.
xzcat är ekvivalent med xz --decompress --stdout.
lzma är ekvivalent med xz --format=lzma.
unlzma är ekvivalent med xz --format=lzma --decompress.
lzcat är ekvivalent med xz --format=lzma --decompress
--stdout.
När man skriver skript som behöver dekomprimera filer rekommenderas det att altid använda namnet xz mäd lämpliga argument (xz -d eller xz -dc) istället för namnen unxz och xzcat.
xz är ett datakomprimeringsverktyg för allmänt bruk med en kommandoradssyntax som liknar gzip(1) och bzip2(1). Det egna filformatet är formatet .xz, men det föråldrade formatet .lzma som anändes av LZMA-verktyg och råa komprimerade strömmar utan huvuden för behållarformatet stödjs också. Dessutom stödjs dekomprimering av formatet .lz som används av lzip.
xz komprimerar och dekomprimerar varje fil i enlighet med det valda arbetsläget. Om inga filer anges eller fil är - läser xz från standard in och skriver den behandade datan på standard ut. xz kommer vägra (visa ett felmeddelande och hoppa över filen) att skriva komprimerad data direkt till standard ut om det är en terminal. På samma sätt kommer xz vägra att läsa komprimerade data från standard in om det är en terminal.
Om inte --stdout anges skrivs andra filer än - till en ny fil vars namn härleds från källfilens namn:
Om målfilen redan finns visas ett felmeddelande och filen hoppas över.
Utom när den skriver till standard ut kommer xz visa en varning och hoppa över filen om något av följande inträffar:
Efter att ha kunnat komprimera eller dekomprimera filen kopierar xz ägaren, gruppen, rättigheterna, åtkomsttiden och ändringstiden från källfilen till målfilen. Om kopieringen av grupp misslyckas ändras rättigheterna så att målfilen inte blir åtkomlig för användare som inte har rättigheter att komma åt källfilen. xz stödjer inte kopiering av annan metadata såsom åtkomststyrhingslistor eller utökade attribut ännu.
När målfilen har stängts framgångsrikt tas källfilen bort såvida inte --keep angavs. Källfilen tas aldrig bort om utdata skrevs till standard ut eller om något fel inträffade.
Att skicka SIGINFO eller SIGUSR1 till xz-processen får den att skriva ut förloppsinformation till standard fel. Detta är bara av begränsat värde eftersom när standard fel går till en terminal så kommer användning av --verbose att skriva ut en automatiskt uppdaterande förloppsindikator.
xz:s minnesanvändning varierar från några få hundra kilobyte till flera gigabyte beroende på komprimeringsinställningarna. Inställningen som användes när en fil komprimerades avgör minnesbehovet hos dekomprimeraren. Typiskt behöver dekomprimeraren 5 % till 20 % av minnesbehovet som komprimeraren behöver när en fil skapas. Till exempel, att dekomprimera en fil skapad med xz -9 kräver för närvarande 65 MiB minne. Ändå är det möjligt att ha .xz-filer som behöver flera gigabyte minne för att dekomprimeras.
Särskilt användare av äldre system kan finna möjligheten av väldigt stor minnesanvändning störande. För att förhindra obehagliga överraskningar har xz en inbyggd minnesanvändningsbegränsare, vilken är avaktiverad som standard. Även om vissa operativsystem kan tillhandahålla möjligheter att begränsa minnesanvändningen hos processer bedömdes det inte som flexibelt nog att lita på det (till exempel, att använda ulimit(1) för att begränsa det virtuella minnet tenderar att hämma mmap(2).
Minnesanvändningsbegränsaren kan aktiveras med kommandoradsflaggan --memlimit=gräns. Ofta är det bekvämare att aktivera begränsaren som standard genom att sätta miljövariabeln XZ_DEFAULTS, till exempel, XZ_DEFAULTS=--memlimit=150MiB. Det är möjligt att sätta gränser separat för komprimering och dekomprimering genom att använda --memlimit-compress=limit och --memlimit-decompress=limit. Att använda dessa två flaggor utanför XZ_DEFAULTS är sällan meningsfullt eftersom en enskild körning av xz inte kan göra både komprimering och dekomprimering och and --memlimit=gräns (eller -M gräns) är kortare att skriva på kommandoraden.
Om den angivna minnesanvändningsgränsen överskrid vid dekomprimering kommer xz visa ett fel och dekomprimeringen av filen misslyckas. Om gröensen överskrids vid komprimering kommer xz försöka skala ner inställningen så att gränsen inte längre överskrids (utom när --format=raw eller --no-adjust används). På detta sätt kommer åtgärden inte misslyckas om inte gränsen är väldigt liten. Skalningen av inställningen görs i steg som inte matchar de förinställda komprimeringsnivåerna, till exempel, om gränsen endast är något mindre än den mängd som behövs till xz -9 kommer inställningen bara skalas ner lite, inte hela vägen ner till xz -8.
Det är möjligt att konkatenera .xz-filer som de är. xz kommer dekomprimera sådana filer som om de vore en enda .xz-fil.
Det är möjligt att infoga utfyllnad mellan de konkatenerade delarna eller efter den sista delen. Utfyllnaden måste bestå av null-bytear och storleken på utfyllnaden måste vara en multipel av fyra byte. Detta kan vara användbart, till exempel, om .xz-filen lagras på ett medium som mäter filstorlekar i 512-byteblock.
Konkaternering och utfyllnad är inte tillåtet med .lzma-filer eller råa strömmar.
På de flesta platser där ett heltalsargument förväntas stödjs ett frivilligt suffix för att enkelt indikera stora heltal. Det får inte finnas något mellanrumm mellan heltalet och suffixet.
Specialvärdet max kan användas för att indikera det maximala heltalet som stödjs av flaggan.
Om flera arbetslägesflaggor ges gäller den sista.
| Förinställning | LexStrl | KompCPU | KompMin | DekMin |
| -0 | 256 KiB | 0 | 3 MiB | 1 MiB |
| -1 | 1 MiB | 1 | 9 MiB | 2 MiB |
| -2 | 2 MiB | 2 | 17 MiB | 3 MiB |
| -3 | 4 MiB | 3 | 32 MiB | 5 MiB |
| -4 | 4 MiB | 4 | 48 MiB | 5 MiB |
| -5 | 8 MiB | 5 | 94 MiB | 9 MiB |
| -6 | 8 MiB | 6 | 94 MiB | 9 MiB |
| -7 | 16 MiB | 6 | 186 MiB | 17 MiB |
| -8 | 32 MiB | 6 | 370 MiB | 33 MiB |
| -9 | 64 MiB | 6 | 674 MiB | 65 MiB |
| Förinställning | LexStrl | KompCPU | KompMin | DekMin |
| -0e | 256 KiB | 8 | 4 MiB | 1 MiB |
| -1e | 1 MiB | 8 | 13 MiB | 2 MiB |
| -2e | 2 MiB | 8 | 25 MiB | 3 MiB |
| -3e | 4 MiB | 7 | 48 MiB | 5 MiB |
| -4e | 4 MiB | 8 | 48 MiB | 5 MiB |
| -5e | 8 MiB | 7 | 94 MiB | 9 MiB |
| -6e | 8 MiB | 8 | 94 MiB | 9 MiB |
| -7e | 16 MiB | 8 | 186 MiB | 17 MiB |
| -8e | 32 MiB | 8 | 370 MiB | 33 MiB |
| -9e | 64 MiB | 8 | 674 MiB | 65 MiB |
Med en anpassad filterkedja kan man specificera kompressionsinställningarna i detalj istället för att lita på inställningarna som hör till förinställningarna. När en anpassad filterkedja anges glöms förinställningsflaggor (-0 … -9 och --extreme) tidigare på kommandoraden. Om en förinställningsflagga anges efter en eller flera flaggor för anpassade filterkedjor gäller den nya förinställningen och de flaggor för anpassade filterkedjor som angivits tidigare glöms.
En filterkedja är jämförbar med att skapa rör på kommando. Vid komprimering skickas den okomprimerade indatan till det första filtret, vars utdata skickas till nästa filter (om något). Utdatan från det sista filtret blir skrivet till den komprimerade filen. Det maximala antalet filter i kedjan är fyra, men typiskt har en filterkedja bara ett ellet två filter.
Många filter har begränsningar på var de kan finnas i filterkedjan: några filter kan bara fungera som det sista filtret i kedjan, några bara om de inte är det sista filtret, och några fungerar i godtycklig position i kedjan. Beroende på filtret är denna begränsning antingen en egenskap hos filterdesignen eller finns för att förhindra säkerhetsproblem.
En anpassad filterkedja kan anges på två olika sätt. Med flaggorna --filters=filter och --filters1=filter … --filters9=filter kan man ange en hel filterkedja med en flagga genom att använda syntaxen för liblzma-filtersträngar. Alternativt kan en filterkedja anges genom att använda en eller flera individuella filterflaggor i den ordning de önskas i filterkedjan. Det vill säga, ordningen på de individuella filterflaggorna är signifikant! Vid avkodning av råa strömmar (--format=raw) måste filterkedjan anges i samma ordning som den specificerades vid komprimeringen. Eventuella individuella filter- eller förinstiällningsflaggor angivna före den fullständiga filterkedjeflaggan (--filters=filter) kommer glömmas. Individuella filter som anges efter den flaggan för en full kedja kommer återställa filterkedjan.
Både den fullständiga och de individuella filterflaggorna tar filterspecifika flaggor som en kommaseparerad lista. Extra komman flaggor ignoreras. Varje flagga har ett standardvärde, så ange dem du vill ändra.
För att se hela filterkedjan och flaggor, använd xz -vv (det vill säga, använd --verbose två gånger). Detta fungerar även för att se flaggorna för filterkedjor som används av förinställningar.
| Filter | Justering | Kommentarer |
| x86 | 1 | 32-bitars eller 64-bitars x86 |
| ARM | 4 | |
| ARM-Thumb | 2 | |
| ARM64 | 4 | 4096-bytesjustering är bäst |
| PowerPC | 4 | Endast rak byteordning |
| IA-64 | 16 | Itanium |
| SPARC | 4 | |
| RISC-V | 2 |
Robotläget aktiveras med flaggan --robot. Det gör att utdata från xz är enklare att tolka av andra program. För närvarande stödjs --robot endast tillsammans med --list, --filters-help, --info-memory och --version. Den kommer att stödjas för komprimering och dekomprimering i framtiden.
xz --robot --list använder tab-separerad utmatning. Första kolumnen av varje rad har en sträng som indikerar typen av informationen som finns på den raden:
Kolumnerna på file-raderna:
Kolumnerna på stream-raderna:
Kolumnerna på block-raderna:
Om --verbose angavs två gånger inkluderas ytterligare kolumner på block-raderna. Dessa visas inte med bara ett --verbose, eftersom det för att få fram denna information krävs många sökningar och kan därmed vara långsamt:
Kolumnerna på summary-raderna:
Från xz 5.1.2alpha:
Kolumnerna på totals-raden:
Om --verbose angavs två gånger inkluderas ytterligare kolumner på totals-raden:
Från xz 5.1.2alpha:
Framtida versioner kan lägga till fler radtyper och fler kolumner kan läggas til på de befintliga radtyperna, men de befintliga kolumnerna kommmer inte ändras.
xz --robot --filters-help skriver ut de filter som stödjs i följande format:
filter:flagga=<värde>,flagga=<värde>…
Varje filter skrivs på en egen rad.
xz --robot --info-memory skriver en rad med flera tab-separerade kolumner:
I framtiden kan utdata från xz --robot --info-memory ha fler kolumner, men aldrig mer än en rad.
xz --robot --version skriver versionsnumret på xz och liblzma i följande format:
XZ_VERSION=XYYYZZZS
LIBLZMA_VERSION=XYYYZZZS
XYYYZZZS är samma på båda raderna om xz och liblzma kommer från samma utgåva av XZ Utils.
Exempel: 4.999.9beta är 49990091 och 5.0.0 är 50000002.
Noteringar (inte varningar eller fel) som skrivs på standard fel påverkar inte slutstatusen.
xz tolkar mellanrumsseparerade listor av flaggor från miljövariablerna XZ_DEFAULTS och XZ_OPT, i den ordningen, före flaggorna på kommandoraden. Observera att endast flaggor tolkas från miljövariablerna; alla andra argument än flaggor ignoreras tyst. Tolkningen görs med getopt_long(3) vilket även används för kommandoradsargumenten.
Varning: genom att sätta dessa miljövariabler ändrar man i praktiken program och skript som kör xz. för det mesta är set säkert att sätta begränsningar på minnesanvändning, antal trådar och komprimeringsflaggor via miljövariablerna. Några flaggor kan dock göra att skript går sönder. Ett uppenbart exempel är --help vilket gör att xz visar en hjälptext istället för att komprimera eller dekomprimera en fil. Mer subtila exempel är --quiet och --verbose. I många fall fungerar det bra att aktivera en förloppsindikator med --verbose, men i några fall skapar de extra meddelandena problem. Utförlighetsnivån påverkar även beteendet hos --list.
XZ_OPT=-2v tar caf apa.tar.xz apa
XZ_OPT=${XZ_OPT-"-7e"} export XZ_OPT
Kommandoradssyntaxen för xz är praktiskt taget en utökning av lzma, unlzma och lzcat så som de kommer från LZMA Utils 4.32.x. I de flesta fall, är det möjligt att ersätta LZMA Utils med XZ Utils utan att göra sönder befintliga skript. Det finns dock några inkompatibiliteter, vilka ibland kan orsaka problem.
Numreringen av förinställda nivåer för komprimering är inte identiska i xz och LZMA Utils. Den viktigaste skillnade är hur lexikonstorlekar avbildas till olika förinställningar. Lexikonstorleken är i stort sett lika med dekomprimerarens minnesanvändning.
| Nivå | xz | LZMA Utils |
| -0 | 256 KiB | N/A |
| -1 | 1 MiB | 64 KiB |
| -2 | 2 MiB | 1 MiB |
| -3 | 4 MiB | 512 KiB |
| -4 | 4 MiB | 1 MiB |
| -5 | 8 MiB | 2 MiB |
| -6 | 8 MiB | 4 MiB |
| -7 | 16 MiB | 8 MiB |
| -8 | 32 MiB | 16 MiB |
| -9 | 64 MiB | 32 MiB |
Lexikonstorlekens skillnader påverkar komprimerarens minnesanvändning också, men det finns några andra skillnader mellan LZMA Utils och XZ Utils, vilket gör skillnaden ännu större:
| Nivå | xz | LZMA Utils 4.32.x |
| -0 | 3 MiB | N/A |
| -1 | 9 MiB | 2 MiB |
| -2 | 17 MiB | 12 MiB |
| -3 | 32 MiB | 12 MiB |
| -4 | 48 MiB | 16 MiB |
| -5 | 94 MiB | 26 MiB |
| -6 | 94 MiB | 45 MiB |
| -7 | 186 MiB | 83 MiB |
| -8 | 370 MiB | 159 MiB |
| -9 | 674 MiB | 311 MiB |
Standardförinställningsninvån i LZMA Utils är -7 medan i XZ Utils är den -6, så båda använder ett 8 MiB lexikon som standard.
Den ikomprimerade storleken på filen kan lagras i huvudet i .lzma. LZMA Utils gör det när den komprimerar normala filer. Alternativet är att markera att den okomprimerade storleken är okänd och använda en markör för lastslut för att indikera var dekomprimeraren skall stanna. LZMA Utils använder denna metod när den okomprimerade storleken inte är känd, vilket är fallet, till exempel, i rör.
xz stödjer dekomprimering av .lzma-filer med eller utan markör för lastslut, men alla .lzma filer som skapas av xz kommer använda markör för lastslut och ha den okomprimerade storleken markerad som okänd i .lzma-huvudet. Detta kan bli ett problem i några ovanliga fall. Till exempel kan en .lzma-dekomprimerare i en inbäddad enhet fungera endast med filer som har en känd okomprimerad storlek. Om man stöter på detta problem behöver man använda LZMA Utils eller LZMA SDK för att skapa .lzma-filer med känd okomprimerad storlek.
Formatet .lzma tillåter värden på lc upp till 8, och värden på lp upp till 4. LZMA Utils kan dekomprimera filer med godtyckliga lc och lp, men skapar alltid filer med lc=3 och lp=0. Att skapa filer med andra lc och lp är möjligt med xz och med LZMA SDK.
Implementationen av LZMA1-filtret i liblzma kräver att summan av lc och lp inte överstiger 4. Alltså, .lzma-filer, vilka överstiger denna gräns, kan inte dekomprimeras med xz.
LZMA Utils skapar endast .lzma-filer som har en lexikonstorlek på 2^n (en potens av 2) men godtar filer med godtycklig lexikonstorlek. liblzma godtar endast .lzma-filer som har en lexikonstorlek på 2^n eller 2^n + 2^(n-1). Detta är för att minska falska positiva vid detektering av .lzma-filer.
Dessa begränsningar bör inte vara ett problem i praktiken, eftersom praktiskt taget alla .lzma-filer har komprimerats med inställningar som liblzma kommer godta.
Vid dekomprimering ignorerar LZMA Utils tyst allting efter den första .lzma-strömmen. I de flesta situationer är detta fel. Detta betyder även att LZMA Utils inte stödjer dekomprimering av konkatenerade .lzma-filer.
Om det finns data kvar efter den första .lzma-strömmen betraktar xz filen som trasig om inte --single-stream användes. Detta kan göra sönder obskyra skript vilka har antagit att avslutande skräp ignoreras.
Den exakta komprimerade utdatan som produceras från samma okomprimerade indatafil kan variera mellan versioner av XZ Utils även om komprimeringsflaggorna är identiska. Detta beror på att kodaren kan förbättras (snabbare eller bättre komprimering) utan att påverka filformatet. Utdatan kan variera även mellan olika byggen av samma version av XZ Utils, om olika byggflaggor används.
Ovanstående betyder att när väl --rsyncable har implementerats kommer inte nödvändigtvis de resulterande filerna vara rsync-bara om inte både gamla och nya filer har komprimerats med samma version av xz. Detta problem kan lösas om en del av kodarimplementeringen fryses för att hålla rsync-bar utdata stabil mellan xz-versioner.
Inbäddade implementationer av .xz-dekomprimerare som XZ Embedded stödjer inte nödvändigtvis filer som skapas med andra typer av integritetskontroll än none och crc32. Eftersom standardvärdet är --check=crc64 måste man använda --check=none eller --check=crc32 när filer skapas för inbäddade system.
Utanför inbäddade system stödjer alla dekomprimerare av .xz-format alla typerna av kontroller, eller åtminstone kan de dekomprimera filern utan att verifiera integritetskontrollen om den specifika kontrollen inte stödjs.
XZ Embedded stödjer BCJ-filter, men endast med standard startavstånd.
Komprimera filen apa till apa.xz med standardkomprimeringsnivån (-6), och ta bort apa om komprimeringen lyckas:
xz apa
Dekomprimera bepa.xz till bepa och ta inte bort bepa.xz även om dekomprimeringen lyckas:
xz -dk bepa.xz
Skapa cepa.tar.xz med förinställningen -4e (-4 --extreme), vilket är långsammare än standardvärdet -6, men behöver mindre minne till komprimering och dekomprimering (48 MiB respektive 5 MiB):
tar cf - cepa | xz -4e > cepa.tar.xz
En blandning av komprimerade och okomprimerade filer kan dekomprimeras till standard ut med ett enda kommando:
xz -dcf a.txt b.txt.xz c.txt d.txt.lzma > abcd.txt
På GNU och *BSD kan find(1) och xargs(1) användas för att parallellisera komprimeringen av många filer:
find . -type f \! -name '*.xz' -print0 \ | xargs -0r -P4 -n16 xz -T1
Flaggan -P till xargs(1) anger antalet parallella xz-processer. Det bästa värdet till flaggan -n beror på hur många filer det finns som skapp komprimeras. Om det bara finns några stycken filer bör värdet förmodigen vara 1; med tiotusentals filer kan 100 eller mer vara lämpligt för att reducera antalet xz-processer som xargs(1) kommer att skapa.
Flaggan -T1 till xz finns för att tvinga den till enkeltrådsläge, eftersom xargs(1) används för att styra mängden parallellisering.
Beräkna hur många byt som har sparats totalt efter komprimering av flera filer:
xz --robot --list *.xz | awk '/^totals/{print $5-$4}'
Ett skript kan vilja veta att det använder en tillräckligt ny xz. Följande sh(1)-skript kontrollerar att versionsnumret för verktyget xz är åtminstone 5.0.0. Denna metod är kompatibel med gamla betaversioner, vilka inte stödde flaggan --robot:
if ! eval "$(xz --robot --version 2> /dev/null)" || [ "$XZ_VERSION" -lt 50000002 ]; then echo "Din xz är för gammal." fi unset XZ_VERSION LIBLZMA_VERSION
Ange en gräns för minnesanvändning för dekomprimering med XZ_OPT, men om en gräns redan har satts, öka den inte:
NEWLIM=$((123 << 20)) # 123 MiB OLDLIM=$(xz --robot --info-memory | cut -f3) if [ $OLDLIM -eq 0 -o $OLDLIM -gt $NEWLIM ]; then XZ_OPT="$XZ_OPT --memlimit-decompress=$NEWLIM" export XZ_OPT fi
Den enklaste användningen av anpassade filterkedjor är att anpassa en LZMA2-förinställning. Detta kan vara användbart eftersom förinställningarna endast täcker en delmängd av de potentiellt användbara kombinationerna av komprimeringsinställningar.
Kolumnerna CompCPU i tabellerna från beskrivningen av flaggorna options -0 ... -9 och --extreme är användbara vid anpassning av LZMA2-förinställningar. Här är de relevanta delarna samlade från dessa två tabeller:
| Förinställning | KompCPU |
| -0 | 0 |
| -1 | 1 |
| -2 | 2 |
| -3 | 3 |
| -4 | 4 |
| -5 | 5 |
| -6 | 6 |
| -5e | 7 |
| -6e | 8 |
Om man vet att en fil behöver ett rätt stort lexikon (till exempel, 32 MiB) för att komprimeras bra, men man vill komprimera den snabbare än xz -8 skulle gjort kan en förinställning med ett lågt värde på CompCPU (till exempel, 1) ändras till att använda ett större lexikon:
xz --lzma2=preset=1,dict=32MiB apa.tar
Med vissa filer kan ovanstående kommando vara snabbare än xz -6 samtidigt som det komprimerar betydligt bättre. Dock måste det påpekas att endast några filer drar fördel av ett stort lexikon samtidigt som värdet CompCPU hålls lågt. Den mest uppenbara situationen, är ett stort lexikon kan hälpa till mycket, är ett arkiv som innehåller väldigt snarlika filer på åtmistone några megabyte var. Lexikonstorleken måste vara signifikant större än någon enskild fil för att låta LZMA2 dra full nytta av likheterna mellan på varandra följande filer.
Om det går bra med väldigt hög minnesanvändning i komprimeraren och dekomprimeraren, och filen som komprimeras är åtminstone flera hundra megabyte, kan det vara användbart att använda ännu större lexikon än de 64 MiB som xz -9 skulle använda:
xz -vv --lzma2=dict=192MiB stor_apa.tar
Att använda -vv (--verbose --verbose) som i exemplet ovan kan vara användbart för att se minnesbehoven för komprimeraren och dekomprimeraren. Kom ihåg att använda ett större lexikon än storleken på den okomprimerade filen är slöseri med minne, så ovanstående kommando är inte användbart för små filer.
Ibland spelar inte dekomprimeringstiden någon roll, men dekomprimerarens minnesanvändning måste hållas låg, till exempel för att göra det möjligt att dekomprimera filen på ett inbäddat system. Följande kommando använder -6e (-6 --extreme) som en bas och sätter lexikonstorleken till bara 64 KiB. Den resulterande filen kan dekomprimeras med XZ Embedded (det är därför det finns --check=crc32) som använder ungerfär 100 KiB minne.
xz --check=crc32 --lzma2=preset=6e,dict=64KiB apa
Om man vill krama ur så många byte som möjligt kan justering av antalet literala kontextbitar (lc) och antalet positionsbitar (pb) ibland hjälpa. Justering av antalet literala positionsbitar (lp) kan också hjälpa, men vanligen är lc och pb viktigare. Till exempel innehåller ett källkodsarkiv huvudsakligen US-ASCII-text, så något i stil med följande kan ge aningen (som 0.1 %) mindre fil än xz -6e (försök även utan lc=4):
xz --lzma2=preset=6e,pb=0,lc=4 källkod.tar
Att använda ett annat filter tillsammans med LZMA2 kan förbättra komprimeringen med vissa filtyper. Till exempel, för att komprimera ett delat x86-32- eller x86-64-bibliotek med filtret x86 BCJ:
xz --x86 --lzma2 libapa.so
Observera att ordningen på filterflaggorna spelar roll. Om --x86 anges efter --lzma2 kommer xz avge ett fel, eftersom det inte kan vara något filter efter LZMA2, och även för att filtret x86 BCJ inte kan användas som det sista filtret i kedjan.
Deltafiltret tillsammans med LZMA2 gan ge bra resultat med bitkartebilder. Det bör vanligen slå PNG, som har några mer avancerade filter än enkla delta men använder Deflat för den faktiska komprimeringen.
Bilden måste sparas i okomprimerat format, till exempel som okomprimerad TIFF. Avståndsparametern i Deltafiltret sätts till att motsvara natalet byte per bildpunkt i bilden. Till exempel, 24-bitars RGB bitkarta behöver dist=3, och det är även bra att skicka pb=0 till LZMA2 för att ge plats för trebytejustering:
xz --delta=dist=3 --lzma2=pb=0 apa.tiff
Om flera bilder har lagts in i ett gemensamt arkiv (till exempel, .tar) kommer Deltafiltret fungera på det också så länge alla bilder har samma antal byte per bildpunkt.
xzdec(1), xzdiff(1), xzgrep(1), xzless(1), xzmore(1), gzip(1), bzip2(1), 7z(1)
XZ Utils: <https://tukaani.org/xz/>
XZ Embedded: <https://tukaani.org/xz/embedded.html>
LZMA SDK: <https://7-zip.org/sdk.html>