Che gli archivi compressi siano oggi estremamente diffusi è ormai un dato di fatto; l'ubiquità raggiunta nel corso del tempo, ad esempio, dal formato di compressione ZIP ha reso sempre più utile e necessario supportare questa ed altre tecnologie simili all'interno dei sistemi IT.
Nonostante sia sempre possibile utilizzare tool di compressione esterni all'interno dei nostri script, così come avviene con il classico CMD o con le shell *NIX, sarebbe auspicabile poter utilizzare dei cmdlet standard, in grado di attenuare la nostra curva di apprendimento: chi di voi è in grado di ricordare la sintassi della riga di comando di PkZip? O di Tar? O, ancora di GZip o di BZip2?
Personalmente ricordo ancora con affetto la sintassi della riga di comando di Arj e di Lha, ma ritengo di essere uno dei pochi con questa deformazione professionale.
L'ottimo PowerShell Community Extensions (abbreviato con PSCX), un add-in gratuito per Windows PowerShell disponibile su CodePlex, mette fortunatamente a nostra disposizione alcuni cmdlet in grado di comprimere file e strutture di cartelle con alcuni dei formati di archiviazione più utilizzati: ZIP, GZIP, BZIP2 e TAR. La sintassi di utilizzo di ciascuno dei comandi di questo add-in rispetta, ovviamente, gli standard di Windows PowerShell, fornendo un comodo e semplice strumento di interazione con questi tipi di archivio. Il pacchetto comprende un'utile guida in linea, con tutte le informazioni sui comandi esposti (guida peraltro disponibile anche qui, su powershell.it).
Vediamo, nell'esempio che segue, come sia possibile produrre un archivio ZIP contenente tutti i file con estensione .gif e .jpg presenti nella struttura della cartella corrente:
Get-ChildItem *.gif, *.jpg -Recurse |
Write-Zip -OutputPath Immagini.zip
E, ancora, come sia possibile generare archivi nel formato composito TAR GZIP, procedendo in due step distinti (uno per produrre l'archivio TAR, l'altro per comprimerlo utilizzando GZIP: probabilmente in futuro sarà possibile effettuare il pipe del primo cmdlet verso il secondo evitando di memorizzare nel frattempo un file):
Get-ChildItem *.gif, *.jpg -Recurse |
Write-Tar -OutputPath Immagini.tar |
Write-GZip -OutputPath Immagini.tar.gz
Ad oggi, purtroppo, PSCX non consente di estrarre file dagli archivi compressi ma i responsabili del progetto promettono che nuovi cmdlet in grado di effettuare queste operazioni saranno aggiunti nella prossima release del prodotto.