Spare diskplads med UPX

0
143

Diskplads er billigt, men der er stadig situationer, hvor du ønsker at genvinde plads. For mig, en af dem er at få den maksimale gratis Dropbox-konto, jeg bruger til at synkronisere mine programmer mellem arbejde og hjem. Hey, skal du ikke sige min sysadmin jeg gøre dette, ville han få et hjertetilfælde fra den eneste tanke af en virus blandt mine værktøjer samling.

Selvfølgelig {zip/rar}ing alt er et no-go, og ingen ønsker at have til at åbne et arkiv, før de bliver i stand til at starte et program. Hvad så?

Indtast UPX, reference packer for eksekverbare filer. UPX komprimerer eksekverbare filer (for det meste .exe .dll under Windows), men modsat zip/rar/whatever, det holder dem eksekverbare, også at bevare deres egenskaber (ikonet, version…). Alt dette på bekostning af en helt ubemærket performance hit, når du starter programmet. Lyder godt? Lad os komprimere alt eksekverbare i denne Dropbox, som er faretruende tæt på at nå sin 2GB grænse.

  1. Download UPX fra SourceForge og udtrække den til <upxFolder>.
  2. Åbn en kommandoprompt, og gå til <upxFolder> (du kan finde kommandoprompt i menuen Start > Tilbehør eller køre det via Windows+R, og derefter på “cmd”. Brug “cd Mappenavn” til at navigere i filsystemet).
  3. Kører upx.exe at have et kig på de muligheder, der findes. Jeg vil bruge -9, men du kan justere dette (for eksempel hvis du føler en performance hit på en gammel maskine-jeg ved ikke, -), og v har verbose output. Nu, skal du navigere til den mappe, af et program, du ønsker at komprimere og køre din friskbagt kommando:
    “<upxFolder>upx.exe” -9 -v *.exe *.dll
    (udskift <upxFolder> i tilstrækkeligt omfang, og holde anførselstegn omkring stien, eller et rum vil give problemer)
  4. Du vil se de filer, der er komprimeret, kompressionsforholdet, såvel som lejlighedsvise “AlreadyPackedException: allerede pakket med UPX”, eller “CantPackException: .NETTO-filer (win32/net) understøttes endnu ikke”, eller “IOException: read error: Invalid argument”. Disse fejl er alle OK, UPX blot meddeler, at de forlod fil uberørt.

Woot, du allerede fået 50MB ved blot at komprimere store ol’Inkscape.

Selvfølgelig er du nu ønsker at gøre dette på ALLE eksekverbare filer i en mappe. Men du er doven, og det perspektiv, der kører denne linie i hundredvis af undermapper efterlader dig trist. Lucky du, jeg er for doven, så jeg gravede Stack Overflow at samle et script, der vil gøre driften rekursivt.

  1. Indsæt dette i en tekst-fil (selvfølgelig justering af de vigtigste online som vi gjorde før), du vil omdøbe til noget som upxRecursive.bat
    for /r /d %%x i (*) gør (
    pushd “%%x”
    “<upxFolder>upx.exe” -9 -v *.exe *.dll
    popd
    )
    pause
  2. Flytte denne batch-fil i din Dropbox mappe, skal du starte det og se det magiske. Det vil tage lang tid på en stor mappe fyldt med eksekverbare filer, men i alvorlig grad vil slanke ned. I mit tilfælde, jeg har sparet 400 MB (fra 1.7 GB til 1,3 GB), hvilket efterlader mig med masser af plads til mere lort.

Afsluttende bemærkninger:

  • UPX har været under udvikling i lang tid, og bliver rost for sin ekstrem stabilitet og pålidelighed, men kunne muligvis efterlade dig med nogle eksotiske eksekverbare filer, der ikke vil køre efter kompression. Jeg personligt aldrig sket for mig, men der sker ulykker. I dette tilfælde, skal du bruge “<upxFolder>upx.exe” -d problematicFile.exe for at få et ukomprimeret version. Bemærk, at det ikke vil være byte-identiske, hvis du ønsker at være i stand til at komme tilbage til byte-identiske versioner, bør du også tilføje –præcis skifte ved komprimering tid.
    Af den måde, folk på PortableApps.com pack al den software, de slipper med UPX. Beroliget om dens pålidelighed?
  • Folk fortrolige med win32/pe-format, vil vide, at .exe .dll er ikke gyldig udvidelser. Den fulde liste er “.exe .dll .cpl .ocx .sys .scr .drv”. Dog, vil jeg ikke anbefale at komprimere følsomme filer som kontrolpanel udvidelser eller driver-filer, og derfor er den linje, jeg foreslår, at målene kun dll og exe filer. Komprimering af VLC er OK, fordi du kan geninstallere den, hvis UPX slagtere. Komprimering af kritiske software er ikke.
  • Jeg er bare gentage min tidligere tidspunkt, men ikke ønsker at se vrede kommentarer fra folk, gøre skøre ting med denne. Igen, ikke gør det på alle C: , det vil ødelægge dit system. Komprimere eksekverbare filer, når du virkelig har brug for det, og inde i mapper indeholder kun reinstallable programmer, hvis noget går galt.
  • UPX er multi-platform. Min artikel fokuserer stærkt på Windows, fordi det er den platform, hvor jeg kan bruge sag kommer fra, men du kan selvfølgelig justere denne idé/script til Linux (plus, vil du sandsynligvis have adgang til en fornuftigere scripting sprog end batch).
  • EDIT: som påpeget af John T. Haller i kommentarerne, PortableApps tilbyder AppCompactor, en grafisk brugergrænseflade, der bygger blandt andet på UPX.

Ronan er en nørd, musiker, der bor i Montreal. Han kan lide at skræmme vagt systemadministratorer med 2GB mapper fulde af falske positiver og skriver om software, musik og liv på flyvende muldvarpeskud.