PDA

Visualizza la versione completa : Comprimere con Perl


Claudio Vituzzi
21-09-2004, 20:14
come comprimo il contenuto di una cartella in Perl?

magari se mi dite il comando *nix equivalente fa lo stesso...(poi lo chiamerò con una system)

Grazie!

Mich_
22-09-2004, 08:25
Non credo che si possa fare da Perl direttamente.

In unix/linux esiste il comando gzip che comprime i file (gunzip per decomprimere), ma dovrebbe anche essere inglobato nei comandi tar / gnutar .

Vedi le pagine dei manuali rispettivi.

FreeManX
22-09-2004, 12:34
Io non l'ho mai fatto, direttamente da perl, comunque CPAN ha restituito questo:
http://search.cpan.org/search?query=compress&mode=all

se hai voglia di "studiare" un po qui trovi la soluzione senza usare una chiamata di sistema (meno si fanno meglio e!).
bye bye

Claudio Vituzzi
22-09-2004, 13:42
grazie mille...ma vorrei approfondire questo fatto sulle chiamate di sistema che meno si fanno e meglio è...attualmente un mio script campa solo di questo...

Claudio Vituzzi
22-09-2004, 14:23
avevo provato con *Archive::Tar* ma non mi comprime le directories....che pa**e...

FreeManX
22-09-2004, 18:30
Allora, fare una chiamata (system) al sistema, può generare problemi di sicurezza, di vario genere, ecco perche' e meglio evitare :) Oltretutto di rendi architettura-dipendente, se provi ad esegiure lo script sotto un altra OS, il tutto va a donne di facili costumi :zizi:

Credo che tu non abbia molta dimestichezza con Linux :).
Cmq TAR, non comprime, ma ragruppa i file in un unico file non compresso, se vuoi comprimere devi utilizzare le librerie zlib, o bz2, o gzip, o zip.

Prima ti credi l'archivio tar, e poi lo comprimi.

buye bye

Claudio Vituzzi
23-09-2004, 17:15
Credo che tu non abbia molta dimestichezza con Linux .


programmo in Perl su MacOs9 (quindi niente webserver...) e poi metto tutto sul netfirms.com (dove poi uso le chiamate di sistema)



Allora, fare una chiamata (system) al sistema, può generare problemi di sicurezza


cmq io uso una sola chiamata: ls -t *.topic



Cmq TAR, non comprime, ma ragruppa i file in un unico file non compresso...


va benissimo comunque...ma posso ragruppare i file di dirs contenute in altre dirs?

ovvero:

/db/forum1/*.topic
/db/forum2/*.topic

vorrei archiviare tutta la dir "db"

grazie mille!

FreeManX
23-09-2004, 18:11
cmq io uso una sola chiamata: ls -t *.topic

Questa la puoi evitare, in perl esiste una "procedura" chiamata globbing, che ti fa il list di una dir. ed e molto semplice

my @lista = </path/*.ext> # Lista file
ovviamente hai un array che puoi trattare come vuoi, cosi hai la lista dei file contenuti nella cartella

esempietto:
while(</db/forum1/*.topic>) {
print "filename: ".$_;
}
ti stampa la lista dei file!



va benissimo comunque...ma posso ragruppare i file di dirs contenute in altre dirs?

ovvero:

/db/forum1/*.topic
/db/forum2/*.topic

vorrei archiviare tutta la dir "db"

grazie mille!

con il comando oppure con la libreria?
1) per il comando guarda qua: http://www.cpqlinux.com/tar.html
2) per la libreria non saprei non la conosco!

bye bye

Claudio Vituzzi
24-09-2004, 11:02
grazie...ma a me i files servono ordinati in ordine di ultima modifica...naturalmente l'avrei potuto fare con stat di perl e altro codice , ma ho sempre creduto (e lo credo ancora) che la chiamata ls -t di Unix sia di gran lunga più veloce...

smentiscimi?!

Claudio Vituzzi
24-09-2004, 11:20
cmq questo codice ha funzionato alla perfezione:



tar -cvf mystuff.tar mystuff/


Grandioso!!!!!

Loading