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 : 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
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 : 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
 
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 ^^.

En espérant avoir une où deux réponses, je vous souhaite un agréable soirée.