#!/usr/bin/perl

$repertoire = shift;
# 1° paramère à la ligne de commande

$pwd =`pwd`;
chomp $pwd;

# déterminer le répertoire observé (en chemin absolu)
if ($repertoire eq "") {
	# si pas d'argument : par défaut on observe le répertoire courant
	$repertoire_observe = $pwd;
} elsif ( ! -d $repertoire) {
	print "L'argument doit être un répertoire :";
	print "$repertoire n'est pas  un répertoire :";
	exit;
} elsif ($repertoire =~ /^\//) {
	# il est déjà absolu
	$repertoire_observe = $repertoire;
} elsif ($repertoire =~ /^\.\./) {
	print "Ce script ne prend pas encore en compte les chemins relatifs avec 'parent'";
	exit;	
} else {
	$repertoire =~ s/^\.\///;
	# enlever le './' initial du chemin relatif
	$repertoire =~ s/^\.//;
	# sinon, enlever le '.' du répertoire courant
	$repertoire_observe = "$pwd/$repertoire";
	# et le concaténer au répertoire courant
}


print "répertoire observé :";
print "\n";
print "$repertoire_observe";
print "\n";
print "\n";

# noms des fichers plus descriptifs : 'lsr_before' et 'lsr_after'
@lsr_before = `/bin/ls -R $repertoire_observe`;
# sauvegarder l'état de départ des fichiers dans $repertoire dans la variable vectorielle '@lsr_before'

print "créez ou supprimez un fichier (dans $repertoire_observe, ou sous-répertoire)\n";
print "\npuis faites 'ENTER'\n";
$stdin = <STDIN>;
# entrée au clavier : ne sert qu'à attendre le 'ENTER', on n'utilise pas la valeur entrée

@lsr_after = `/bin/ls -R $repertoire_observe`;
# sauvegarder l'état final des fichiers dans $repertoire dans la variable vectorielle '@lsr_after'

# à partir des variables vectorielles '@lsr_before' et '@lsr_after'
# créer les fichiers 'files_before' et 'files_after'
# où tous les noms de fichiers sont précédés de leur chemin absolu
# de manière à ce que la commande 'diff' produise immédiatement ce qui est recherché

open(FILESB, ">files_before");
foreach (@lsr_before) {
# parcourir le vecteur @lsr_before
	if (/^\//) {
	# si la ligne commence par un /, c'est le chemin absolu d'un répertoire
		chomp;
		s/:$//;
		# éliminer le ':' qui suit le nom du répertoire
		$absolute_directory = $_;
		# et on le sauvegarde dans la variable $absolute_directory
	} else {	
		s/(.+)/$absolute_directory\/$1/;
		# si la ligne n'est pas une ligne vide
		# ajouter le nom du répertoire (et un '/' littéral) devant celui du fichier
		print FILESB;
		# écrire dans le fichier 'files_before'
	}
}
close(FILESB);

open(FILESA, ">files_after");
foreach (@lsr_after) {
# parcourir le vecteur @lsr_after
	if (/^\//) {
	# si la ligne commence par un /, c'est le chemin absolu d'un répertoire
		chomp;
		s/:$//;
		# éliminer le ':' qui suit le nom du répertoire
		$absolute_directory = $_;
		# et on le sauvegarde dans la variable $absolute_directory
	} else {	
		s/(.+)/$absolute_directory\/$1/;
		# si la ligne n'est pas une ligne vide
		# ajouter le nom du répertoire (et un '/' littéral) devant celui du fichier
		print FILESA;
		# écrire dans le fichier 'files_after'
	}
}
close(FILESA);

print "\nFichiers (et répertoires) créés/supprimés\n";
print "(produit par `diff files_before files_after`) :\n\n";

$diff_files = `diff files_before files_after`;
# détecter la différence départ/final par la commande 'diff' et le mettre dans la variable $diff_files
print $diff_files;
# l'afficher
print "\n";


