Puppeteers Blog

Zip-arkistojen käsittely Powershellillä

August 9, 2018 

Powershell 5:n myötä myös ZIP-arkistoja voi käsitellä Powershellillä. Tätä aiemmin piti käyttää jos jonkinmoisia kikkoja arkistojen purkamiseen, mikä etenkin komentoriviltä työskenneltäessä oli erittäin ärsyttävää. Arkisto luodaan tähän tapaan:

PS> Compress-Archive -LiteralPath tap-windows6 -DestinationPath tap-windows6-9.22.3.zip

Yleensä ottaen kohdetiedoston nimeen ei tarvitse lisätä tiedostopäätettä (.zip). Tässä tapauksessa Compress-Archive CmdLet kuitenkin hämmentyy, jos sitä ei ole:

PS> Compress-Archive -LiteralPath tap-windows6 -DestinationPath tap-windows6-9.22.3
 Compress-Archive : .3 is not a supported archive file format. .zip is the only supported archive file format.
 --- snip ---

Syynä ovat tietenkin kohdetiedoston nimessä olevat pisteet. Compress-Archive CmdLetissä on dokumentoimaton ja jokseenkin ärsyttävä bugi tai ominaisuus: se ei lisää pisteellä alkavia piilohakemistoja arkistoon paitsi jos ne määritellään eksplisiittisesti lähdetiedostolistauksessa (-LiteralPath). Lisäksi kaikki lähdetiedostolistauksen tiedostot ja kansiot lisätään suoraan arkiston juureen, eikä niiden polkua kunnioiteta. Siis esimerkiksi

-LiteralPath kansio1, kansio2/.piilokansio

luo seuraavan hakemistorakenteen arkistoon:

kansio1
 .piilokansio

Jostain syystä piilotiedostot kuitenkin kopioidaan normaalisti. Käytännössä tämä tarkoittaa sitä, että esimerkiksi Git-repositoryjen pakkaaminen zip-arkistoon ei kerta kaikkiaan onnistu Compress-Archive CmdLetillä.

Arkiston purku suoraan työhakemistoon tapahtuu seuraavasti:

PS> Expand-Archive -LiteralPath tap-windows6-9.22.3.zip -DestinationPath .

Vaihtoehtoisesti arkiston sisällölle voidaan luoda erillinen hakemisto purun yhteydessä:

PS> Expand-Archive -LiteralPath tap-windows6-9.22.3.zip -DestinationPath tap-windows6-9.22.3

Erilliseen hakemistoon purkaminen on hyödyllistä silloin, kun arkiston sisältö on suoraan sen juurihakemistossa.

Samuli Seppänen
Samuli Seppänen
Author archive
menucross-circle