Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1865 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [Shell ou Perl] extraire un fichier dans un zip

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Shell ou Perl] extraire un fichier dans un zip

n°897251
Aricoh
gentil mais fo po pousser
Posté le 23-03-2007 à 13:03:54  profilanswer
 

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
mood
Publicité
Posté le 23-03-2007 à 13:03:54  profilanswer
 

n°897258
wedgeant
Da penguin inside
Posté le 23-03-2007 à 13:37:57  profilanswer
 

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
n°897259
Aricoh
gentil mais fo po pousser
Posté le 23-03-2007 à 13:41:28  profilanswer
 

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:

n°897260
wedgeant
Da penguin inside
Posté le 23-03-2007 à 13:43:01  profilanswer
 

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
n°897262
Aricoh
gentil mais fo po pousser
Posté le 23-03-2007 à 13:43:36  profilanswer
 

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.

n°897263
wedgeant
Da penguin inside
Posté le 23-03-2007 à 13:45:14  profilanswer
 

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
n°897264
G Abitbol
Posté le 23-03-2007 à 13:46:10  profilanswer
 

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

n°897265
wedgeant
Da penguin inside
Posté le 23-03-2007 à 13:47:08  profilanswer
 

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
n°897266
G Abitbol
Posté le 23-03-2007 à 13:58:32  profilanswer
 

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.

n°897267
Aricoh
gentil mais fo po pousser
Posté le 23-03-2007 à 13:59:22  profilanswer
 

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é  :)

mood
Publicité
Posté le 23-03-2007 à 13:59:22  profilanswer
 

n°897269
wedgeant
Da penguin inside
Posté le 23-03-2007 à 14:04:45  profilanswer
 

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
n°897272
G Abitbol
Posté le 23-03-2007 à 14:11:56  profilanswer
 

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 ;)

n°897276
Aricoh
gentil mais fo po pousser
Posté le 23-03-2007 à 14:16:33  profilanswer
 

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  ;)

n°897281
wedgeant
Da penguin inside
Posté le 23-03-2007 à 14:25:52  profilanswer
 

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
n°897282
Aricoh
gentil mais fo po pousser
Posté le 23-03-2007 à 14:27:12  profilanswer
 

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

n°897286
wedgeant
Da penguin inside
Posté le 23-03-2007 à 14:37:40  profilanswer
 

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
n°897287
Aricoh
gentil mais fo po pousser
Posté le 23-03-2007 à 14:39:41  profilanswer
 

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:  

n°897291
Aricoh
gentil mais fo po pousser
Posté le 23-03-2007 à 14:43:27  profilanswer
 

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

n°897302
wedgeant
Da penguin inside
Posté le 23-03-2007 à 14:58:14  profilanswer
 

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
n°897305
Aricoh
gentil mais fo po pousser
Posté le 23-03-2007 à 15:01:25  profilanswer
 


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

n°897411
Aricoh
gentil mais fo po pousser
Posté le 23-03-2007 à 20:26:55  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [Shell ou Perl] extraire un fichier dans un zip

 

Sujets relatifs
création d'un script shell[Debian] Programme de consignation du shell
comparer proprietaire fichier (UNIX AIX)Lancement automatique script shell sur MinGW Windows
mes scripts shell ne se lance plus...Decrypter sous linux un fichier crypte avec AxCrypt
[AIX] script shell qui fonctionne bizarreshell, boucle for et cat d'un fichier
Ajouter un fichier dans une image ISO 
Plus de sujets relatifs à : [Shell ou Perl] extraire un fichier dans un zip


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR