script de synchronisation entre deux dossier (perl)
Bonjour,
Je cherche à faire un script en PERL qui me permettrait de synchroniser deux dossiers
un dossier source avec un dossier destination. J'ai réalisé jusque la une partie de mon code mais plein d'erreur se sont fait la joie de venir, évidemment sinon se n'est pas drôle.
Le code doit impérativement être en PERL (travail de classe, et oui)
je vous présente donc ce que j'ai déjà mis au point.
Code:
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 64 65 66 67 68 69 70 71 72
|
#! /usr/bin/perl -w
use strict;
use warnings;
use File::Compare;
my($source,$dest) = ($ARGV[0],$ARGV[1]);
#met mon dossier source dans la variable $dossiersrc et ensuite entre les element du dossier dans le tableau tblsrc
my ($dossiersrc) = "$source";
my @tblsrc = $dossiersrc;
#met mon dossier sdestination dans la variable $dossierdest et ensuite entre les element du dossier dans le tableau tbldest
my ($dossierdest) = "$dest";
my @tbldest = $dossierdest;
#cette boucle for permet de parcourir le tableau source
for(my ($j) = 0; $j < @tblsrc; $j++)
{
# ici je vérifie si l'élément séléctionné est un dossier
if(-d $dossiersrc == true)
{
#je crée un Flag afin de tester si l'élément séléctionner possède un double dans le dossier de destination
my $Flag = 0;
# cette boucle me permet de parcourir le dossier de destination
for (my ($i) = 0; $i < @tbldest; $i++)
{
# Cette boucle if compare les deux éléments séléctionné
if($tblsrc[j] == $tbldest[i])
{
# comme l'élément du dossier source est un dossier et que l'élément du dossier destination l'est également, je lance relance la synchronisation de façon récursive en entrant cette fois les dossier séléctionné dans les tableaux comme nouveaux dossiers source et destination, pour montrer que l'élément du dossier source possèdait un doublon, je met le flag à un.
synchronisation($tblsrc[j],$tbldest[i]);
$Flag = 1;
}
}
# je test le flag, pour voir si l'élément séléctionné precèdemment a trouver un doublon
if($Flag == 0)
{
# comme le flag est à zéro, cela veut dire que mon élément séléctionné ne possède pas de doublon il doit donc être copier dans le dossier de recetpion
dircopy($tblsrc[j],$dossierdest);
}
}
# le esle veut dire que l'élément séléctionné n'est pas un dossier donc il s'agit d'un fichier
else
{
#comme avant je déclare un flag à zéro pour vérifier si l'élément séléctionné possède un doublon
my $Flag = 0;
# cette boucle parcour le tableau destination
for(my ($i) = 0; $i < @tbldest; $i++)
{
# ce if compare si les deux éléments séléctionné sont des doublon l'un de l'autre
if($tblsrc[j] == $tbldest[i])
{
#si oui je met le flag à un et je test voire si les dates de dérnière modification sont pareille
$Flag =1;
if(compare($tblsrc[j], $tbldest[i]) != 0)
{
# si elles sont diffèrente, je copie l'élément séléctionné du dossier source dans le dossier de destination
copy($tblsrc[j], $dossierdest);
}
}
}
# je test pour voire si l'élément sélectionné possèdait un doublon
if($Flag == 0)
{
# comme le flag est à zéro, cela veut dire que mon élément séléctionné ne possède pas de doublon il doit donc être copier dans le dossier de destination
copy($tblsrc[j],$dossierdest);
}
}
}
print "@tblsrc \n";
print "@tbldest \n"; |
et voici le resultat :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
john@john-VirtualBox:~$ /home/john/Bureau/synchronisation.pl /home/john/Bureau/dossiersrc /home/john/Bureau/dossierrcpt
Argument "j" isn't numeric in array element at /home/john/Bureau/synchronisation.pl line 28.
Argument "i" isn't numeric in array element at /home/john/Bureau/synchronisation.pl line 28.
Argument "j" isn't numeric in array element at /home/john/Bureau/synchronisation.pl line 51.
Argument "i" isn't numeric in array element at /home/john/Bureau/synchronisation.pl line 51.
Bareword "true" not allowed while "strict subs" in use at /home/john/Bureau/synchronisation.pl line 20.
Bareword "j" not allowed while "strict subs" in use at /home/john/Bureau/synchronisation.pl line 28.
Bareword "i" not allowed while "strict subs" in use at /home/john/Bureau/synchronisation.pl line 28.
Bareword "j" not allowed while "strict subs" in use at /home/john/Bureau/synchronisation.pl line 31.
Bareword "i" not allowed while "strict subs" in use at /home/john/Bureau/synchronisation.pl line 31.
Bareword "j" not allowed while "strict subs" in use at /home/john/Bureau/synchronisation.pl line 39.
Bareword "j" not allowed while "strict subs" in use at /home/john/Bureau/synchronisation.pl line 51.
Bareword "i" not allowed while "strict subs" in use at /home/john/Bureau/synchronisation.pl line 51.
Bareword "j" not allowed while "strict subs" in use at /home/john/Bureau/synchronisation.pl line 55.
Bareword "i" not allowed while "strict subs" in use at /home/john/Bureau/synchronisation.pl line 55.
Bareword "j" not allowed while "strict subs" in use at /home/john/Bureau/synchronisation.pl line 58.
Bareword "j" not allowed while "strict subs" in use at /home/john/Bureau/synchronisation.pl line 66.
Execution of /home/john/Bureau/synchronisation.pl aborted due to compilation errors. |
j'ai commencer le PERL il y a 3 mois, pour vous faire une idée de mes connaissance et le cour est le lundi matin ^^. :roll:
En espérant avoir une où deux réponses, je vous souhaite un agréable soirée.