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 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| #! /usr/bin/perl -w
use strict;
use warnings;
use File::Compare;
my($src,$dest,$temps) = ($ARGV[0],$ARGV[1],$ARGV[2]);
&synchronisation();
sub synchronisation
{
#met mon dossier source dans la variable $dossiersrc et ensuite entre les element du dossier dans le tableau tblsrc
opendir my ($dossiersrc), $src or die "Erreur : $!\n";
my @tblsrc = readdir($dossiersrc);
close $dossiersrc;
#met mon dossier sdestination dans la variable $dossierdest et ensuite entre les element du dossier dans le tableau tbldest
opendir my ($dossierdest), $dest or die "Erreur : $!\n";
my @tbldest = readdir($dossierdest);
close $dossierdest;
#cette boucle foreach permet de parcourir le tableau source
foreach my $parcourirsrc (@tblsrc)
{
# ici je vérifie si l'élément séléctionné est un dossier
if(-d $parcourirsrc)
{
#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
foreach my $parcourirdest (@tbldest)
{
# Cette boucle if compare les deux éléments séléctionné
if($parcourirsrc eq $parcourirdest)
{
# 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.
print "rec\n";
synchronisation($parcourirsrc,$parcourirdest);
$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
push(@tbldest, $parcourirsrc);
#dircopy($tblsrc[$j],@tbldest);
}
}
# 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
foreach my $parcourirdest (@tbldest)
{
# ce if compare si les deux éléments séléctionné sont des doublon l'un de l'autre
if($parcourirsrc eq $parcourirdest)
{
#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($parcourirsrc, $parcourirdest) != 0)
{
# si elles sont diffèrente, je copie l'élément séléctionné du tableau source dans le tableau de destination
$parcourirdest = $parcourirsrc;
}
}
}
# 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
#$#tbldest = $parcourirsrc;
push(@tbldest, $parcourirsrc);
}
}
}
print "@tblsrc \n";
print "@tbldest \n";
$dossiersrc = @tblsrc;
$dossierdest = @tbldest;
} |
Partager