IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Perl comparaison dossiers


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 30
    Par défaut Perl comparaison dossiers
    Bonjour,

    Cela fait plusieurs jours que je me bat pour effectuer un petit script perl pas méchant pour un habitué. N'étant pas programmeur, je perds pas mal de temps là dessus.

    J'ai un dossier_HD et un dossier_BD.
    Le dossier HD contient des fichiers images .jpg et .eps
    Le dossier_BD ne contient que des .jpg

    Le script doit vérifier que les fichiers dans dossier_HD soient également présent dans dossier_BD quelque soit l'extension. Sinon il les compresses et les y met.

    Exemple concret :

    Dossier_HD contient : 001.eps et 002.jpg
    Dossier_BD contient : 001.jpg

    Le script parcourt le dossier HD, prends 001.eps, mais n'en fait rien car présent dans dossier_BS sous 001.jpg
    Passe à 002.jpg et se rend compte de son absence dans dossier_BD.
    Il le compresse (avec une ligne de commande imagemagick) et le met dans dossier_BD.

    Je pense avoir été clair.

    Si vous aviez un bout de code que je pourrais adapter à la finalité de mon projet.

    Merci.

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    qu'entends tu par compression?

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Voilà un script fait uniquement pour toi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    #!/usr/bin/perl
    use strict;
    use warnings;
    use File::Basename;
    use List::Compare;
    use File::Copy;
     
    my $RepertoireHD = ""; # <=========== A completer
    my $RepertoireBD = ""; # <=========== A completer
     
    # Liste les fichiers de chaque repertoire
    my (%FichiersHD, %FichiersBD) = ();
     
    # Creation d'un hash avec en cle : Nom fichier sans extension et en valeur : 
    # chemin complet vers fichiers
    foreach my $FichierHD ( ListerFichiers($RepertoireHD) ) {
      my ( $NomFichier, $Chemin, $Extension ) = fileparse($FichierHD, qr/\.[^.]*/);
      $FichiersHD{$NomFichier} = $FichierHD;
      print "HD - $NomFichier : $FichierHD\n";
    }
    foreach my $FichierBD ( ListerFichiers($RepertoireBD) ) {
      my ( $NomFichier, $Chemin, $Extension ) = fileparse($FichierBD, qr/\.[^.]*/);
      $FichiersBD{$NomFichier} = $FichierBD;
      print "BD - $NomFichier : $FichierBD\n";
    }
     
    # Comparaison des fichiers dans les 2 repertoires
    my @FichiersSansExtensionHD = keys %FichiersHD;
    my @FichiersSansExtensionBD = keys %FichiersBD;
     
     
    my $ListCompare = List::Compare->new(\@FichiersSansExtensionHD, \@FichiersSansExtensionBD);
    # nom des fichiers (sans extension) present dans le repertoire HD et pas dans BD
    my @FichiersUniqueHD = $ListCompare->get_unique;
     
    # On les copie dans le repertoire BD apres compression
    foreach my $FichierUniqueHD ( @FichiersUniqueHD ) {
      print "Fichier unique HD : $FichierUniqueHD\n";
      # Compression du fichier
      # Je compresse le fichier $FichiersHD{$FichierUniqueHD} <==========  Compression  A completer
     
      # Copie du fichier
      copy( $FichiersHD{$FichierUniqueHD},  $RepertoireBD);
    }
     
     
    # Lister les fichiers d'un répertoire
    sub ListerFichiers {
     
      my ($repertoire) = @_;
      opendir (REP, $repertoire) or die "impossible d'ouvrir $repertoire\n";
      my @FichiersRepertoires = grep { !/^\.\.?$/ } readdir(REP);
      closedir (REP);
     
      my @fichiers = ();
      foreach my $nom (@FichiersRepertoires) {
        if ( -f "$repertoire/$nom") {
          push (@fichiers, "$repertoire/$nom");  
        }
      }
     
      return @fichiers;
    }
    Pour les explications de codage voir les cours et tutoriels pour apprendre Perl : http://perl.developpez.com/cours/

  4. #4
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 30
    Par défaut
    J'entends par compression une compression au niveau nombre de pixels ...
    Mais ceci est géré par un appel de commande avec "system" (sous Windows).

    Merci pour le script.
    Je l'ai testé, mais il me met un message d'erreur spécifiant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Can't Locate List/Compare.pm in @INC (@INC contains: C:/Perl/site/lib/ C:/Perl/lib .)
    Cela viendrait-il d'un package non installé ?

    Merci.

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    faut installer le module List::Compare

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Citation Envoyé par Arnaud62 Voir le message
    J'entends par compression une compression au niveau nombre de pixels ...
    Mais ceci est géré par un appel de commande avec "system" (sous Windows).

    Merci pour le script.
    Je l'ai testé, mais il me met un message d'erreur spécifiant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Can't Locate List/Compare.pm in @INC (@INC contains: C:/Perl/site/lib/ C:/Perl/lib .)
    Cela viendrait-il d'un package non installé ?

    Merci.
    Il est possible d'utiliser imagemacgick via perl. Il suffit d'installer le module adéquat aussi.

  7. #7
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 30
    Par défaut
    Ah bon !
    Je ne savais pas.

    Merci pour le script.
    Ca marche super.
    Sauf un petit truc :

    Les fichiers eps il les compresse, mais il garde l'ancienne extension.
    Soit le fichier 002.eps compressé donne 002.eps.jpg


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. help script perl comparaison de deux fichiers
    Par nosuperman dans le forum Langage
    Réponses: 51
    Dernier message: 21/03/2012, 09h11
  2. [perl] comparaison de fichiers
    Par falco- dans le forum Langage
    Réponses: 3
    Dernier message: 12/07/2007, 19h54
  3. comparaison en perl
    Par jerem_psg dans le forum Langage
    Réponses: 10
    Dernier message: 09/04/2007, 18h56
  4. Modifier droit d'un dossier en perl
    Par rafawel dans le forum Langage
    Réponses: 9
    Dernier message: 18/11/2005, 18h25
  5. [MS DOS] Comparaison de dossiers
    Par Furius dans le forum Windows
    Réponses: 9
    Dernier message: 22/10/2005, 20h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo