[Shell ou Perl] extraire un fichier dans un zip

extraire un fichier dans un zip [Shell ou Perl] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 23-03-2007 à 13:03:54    

Bonjour,
 
la question semble anodine pour vous autres, habitués des commandes UNIX mais là, j'avoue être dubitatif sur la manière dont m'y prendre.
 
Voilà. J'administre un jeu se déroulant par tour. Chaque joueur reçoit un fichier HTML à chaque tour. J'archive tous les fichiers HTML d'un tour dans un seul fichier zip.
 
L'un de mes joueurs vient de planter son dd et il aimerait bien que je lui retourne l'intégralité de ses tours HTML.
 
Je ne vous demanderais rien si c'était rapide à faire, seulement voilà : j'ai environ 130 archives zip  :ouch:  
 
Admettons qu'il s'agisse du joueur n° 108. A chaque tour, il a reçu un fichier HTML nommé (je simplifie) Jo108Ton (où n est un n° de tour). Exemple : fichier Jo108To24.htm.
 
A moins d'extraire chacun des zip pour n'en récupérer qu'un seul fichier à chaque fois, et tout ça manuellement, je vois pas comment m'y prendre.
 
Je programme en Perl, aussi aurais-je juste besoin que vous m'aidiez sur le truc suivant.
 
J'aimerais en fait avoir une commande UNIX à passer à mon script Perl pour pécho la liste des fichiers html contenus dans un zip donné et n'en extraire qu'un s'il concerne le joueur en question.
 
A partir de la liste des fichiers, je pourrai me débrouiller ensuite pour extraire le fichier. Mais comment avoir la liste ?


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 23-03-2007 à 13:03:54   

Reply

Marsh Posté le 23-03-2007 à 13:37:57    

Cherches dans les modules perl, il y en a un (j'ai plus le nom en tête) qui te permet de piloter les fichiers zip, d'en extraire un fichier, d'avoir la liste (ce qui t'intéresse) etc etc ...

 

Je m'en étais servi à l'époque (pas si lointaine) où je jouais à un jeu comme celui que tu gères (c'est quoi d'ailleurs ?), pour générer une cartographie à partir de mon rapport et de ceux de mes alliés :D


Message édité par wedgeant le 23-03-2007 à 13:38:14

---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 23-03-2007 à 13:41:28    

Mais bien sûr, tu as raison, j'avais oublié le module Perl Archive::Zip !! J'ignorais juste qu'en plus de créer des fichiers zip, il était aussi capable de retourner des listes !
 
Impec, merci m'sieur  :jap:

Reply

Marsh Posté le 23-03-2007 à 13:43:01    

Et alors, c'est quoi ton jeu ? [:alph-one]

 

edit: de rien :D

Message cité 1 fois
Message édité par wedgeant le 23-03-2007 à 13:43:11

---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 23-03-2007 à 13:43:36    

wedgeant a écrit :

Et alors, c'est quoi ton jeu ? [:alph-one]
 
edit: de rien :D


 
Mais que t'es curieux toué  :D  
 
Un jeu de combats de gladiateurs.

Reply

Marsh Posté le 23-03-2007 à 13:45:14    

Aricoh a écrit :

Mais que t'es curieux toué  :D

 

Un jeu de combats de gladiateurs.


Voui, c'est pour savoir si j'en ai fait partie à un moment donné  [:anathema]
En fait je pense pas ... j'étais plutôt SF (oceane-like, lifequest, toussah)

 

edit: tu m'le dis en mp, hein hein, dis ... steuplé [:ti-ki]


Message édité par wedgeant le 23-03-2007 à 13:45:57

---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 23-03-2007 à 13:46:10    

Aricoh a écrit :


A moins d'extraire chacun des zip pour n'en récupérer qu'un seul fichier à chaque fois, et tout ça manuellement, je vois pas comment m'y prendre.
 
J'aimerais en fait avoir une commande UNIX à passer à mon script Perl pour pécho la liste des fichiers html contenus dans un zip donné et n'en extraire qu'un s'il concerne le joueur en question.
 
A partir de la liste des fichiers, je pourrai me débrouiller ensuite pour extraire le fichier. Mais comment avoir la liste ?


 
sudo emerge unzip && man unzip
 
=> $ unzip -l tonfichir.zip

Reply

Marsh Posté le 23-03-2007 à 13:47:08    

G Abitbol a écrit :

sudo emerge unzip && man unzip
 
=> $ unzip -l tonfichir.zip


[:minusplus]
Euh oui mais non en fait ... en perl y'a même pas besoin de tout ça [:dawacube]


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 23-03-2007 à 13:58:32    

wedgeant a écrit :

[:minusplus]
Euh oui mais non en fait ... en perl y'a même pas besoin de tout ça [:dawacube]


 
Oui mais en fait, d'après le titre du post, j'avais compris qu'il voulait du perl OU du shell, et faire un script Perl juste pour lister le fichiers d'une archive zip, c'ést un peu sortir le tank pour tuer un moustique.

Reply

Marsh Posté le 23-03-2007 à 13:59:22    

G Abitbol a écrit :

Oui mais en fait, d'après le titre du post, j'avais compris qu'il voulait du perl OU du shell, et faire un script Perl juste pour lister le fichiers d'une archive zip, c'ést un peu sortir le tank pour tuer un moustique.


 
Heu, en fait ce n'est pas un zip mais plus de 120 sur lesquels je dois bosser et du coup, Perl me semble tout indiqué  :)

Reply

Marsh Posté le 23-03-2007 à 13:59:22   

Reply

Marsh Posté le 23-03-2007 à 14:04:45    

Aricoh a écrit :

Heu, en fait ce n'est pas un zip mais plus de 120 sur lesquels je dois bosser et du coup, Perl me semble tout indiqué  :)


+1
D'autant plus que tu peux ouvrir les 120 en même temps avec perl, travailler dessus et tout ... tout ça sans avoir à les extraire nulle part :D
Bon ok, faut avoir assez de RAM, mais en théorie ça marche  [:anathema]


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 23-03-2007 à 14:11:56    

wedgeant a écrit :

+1
D'autant plus que tu peux ouvrir les 120 en même temps avec perl, travailler dessus et tout ... tout ça sans avoir à les extraire nulle part :D
Bon ok, faut avoir assez de RAM, mais en théorie ça marche  [:anathema]


 
 
mouais, je suis pas convaincu :
 

Code :
  1. #!/bin/bash
  2. for i in `ls *.zip` ;
  3. do
  4.     files=`unzip -l $i | grep lenumerodujoueur`
  5.     for j in $files ;
  6.     do
  7.         unzip $i $j
  8.     done
  9. done


 
bien sûr c'est vite fait hein, il doit y avoir des erreurs, mais l'idée est là, et j'ai pas besoin de tout dézipper non plus ;)

Reply

Marsh Posté le 23-03-2007 à 14:16:33    

Oh, mais ça a l'air intéressant ton truc dis-moi  :D  
 
Et ça m'évite de faire un script Perl et manipuler mes 120 zip comme des objets (je déteste la POO)
 
Je teste ça ce soir.
 
Tu vas m'entendre depuis chez toi si ça marche pas  :D  ;)

Reply

Marsh Posté le 23-03-2007 à 14:25:52    

Aricoh a écrit :

Oh, mais ça a l'air intéressant ton truc dis-moi  :D  
 
Et ça m'évite de faire un script Perl et manipuler mes 120 zip comme des objets (je déteste la POO)
 
Je teste ça ce soir.
 
Tu vas m'entendre depuis chez toi si ça marche pas  :D  ;)


 [:mouais]  
man unzip mon pote :o


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 23-03-2007 à 14:27:12    

wedgeant a écrit :

[:mouais]  
man unzip mon pote :o


 
Eh dis, t'as pas pris l'option "smileys visibles" sur le forum ?
 
 ;) = je plaisantais
 
 :kaola:  :D

Reply

Marsh Posté le 23-03-2007 à 14:37:40    

Aricoh a écrit :

Eh dis, t'as pas pris l'option "smileys visibles" sur le forum ?
 
 ;) = je plaisantais
 
 :kaola:  :D


 [:croquignol]  
Nan, mais tu pouvais aussi être masochiste et vouloir te pignoler devant un script bash qui tuerait instantannément un rhinocéros hein  :sol:


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 23-03-2007 à 14:39:41    

wedgeant a écrit :

[:croquignol]  
Nan, mais tu pouvais aussi être masochiste et vouloir te pignoler devant un script bash qui tuerait instantannément un rhinocéros hein  :sol:


 
 :lol:  
 
Bon, si ça peut te faire plaisir, j'tenterais de transformer ce script bash en script Perl et sans passer par Archive::zip  :D  
 
Merci à toi, G Abitbol  :jap:  

Reply

Marsh Posté le 23-03-2007 à 14:43:27    

Allez, une version de grosse brute à deux balles Perl :
 

Code :
  1. #!/usr/bin/perl -w
  2. @zip = <*.zip>;
  3. die "retourne voir la-bas si j'y suis, pas d'zip trouvé !\n" if (! @zip);
  4. foreach my $zip(@zip)
  5. {
  6.     @_ = `unzip -l $zip | grep lenumerodujoueur`;
  7.     foreach my $fic(@_)
  8.     {
  9.      system("unzip $zip $fic" );
  10.     }
  11. }


 
Mais par précaution, je testerai la version bash avant  :D

Reply

Marsh Posté le 23-03-2007 à 14:58:14    

Code :
  1. #!/usr/bin/perl -w
  2. my @zip = <*.zip> or die "retourne voir la-bas si j'y suis, pas d'zip trouvé !\n" ;
  3. foreach my $zip(@zip)
  4. {
  5.     @_ = system("unzip -l $zip | grep lenumerodujoueur" );
  6.     foreach (@_)
  7.     {
  8.      system("unzip $zip $_" );
  9.     }
  10. }
 

t'économises une variable :o
Et il vaut mieux faire appel à system() qu'à `` :o
et "or" c'est pas pour les manchots :o
et si tu mets -w en option, faut déclarer @zip sinon tu vas te faire jeter :o

 

[:cupra]

Message cité 1 fois
Message édité par wedgeant le 23-03-2007 à 14:59:32

---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 23-03-2007 à 15:01:25    


 
Cache-toi !!  :kaola:  
 
 ;)  ;)  ;)  

Reply

Marsh Posté le 23-03-2007 à 20:26:55    

Ton script est passé sans correction aucune, G Abitbol, et j'ai bien tout extrait !!
 
Bravo et merci pour ton aide !!!  :jap:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed