Réponses:
La solution, comme pour tout, est un script perl:
#!/usr/bin/perl
use File::Find;
my $directory1 = '/tmp/temp1';
my $directory2 = '/tmp/temp2';
find(\&hashfiles, $directory1);
sub hashfiles {
my $file1 = $File::Find::name;
(my $file2 = $file1) =~ s/^$directory1/$directory2/;
my $mode1 = (stat($file1))[2] ;
my $mode2 = (stat($file2))[2] ;
my $uid1 = (stat($file1))[4] ;
my $uid2 = (stat($file2))[4] ;
print "Permissions for $file1 and $file2 are not the same\n" if ( $mode1 != $mode2 );
print "Ownership for $file1 and $file2 are not the same\n" if ( $uid1 != $uid2 );
}
Consultez http://perldoc.perl.org/functions/stat.html et http://perldoc.perl.org/File/Find.html pour plus d'informations, en particulier stat
celle si vous souhaitez comparer d'autres attributs de fichier.
Si les fichiers n'existent pas dans le répertoire2 mais existent dans le répertoire1, il y aura également une sortie car le stat
sera différent.
Rechercher et stat:
find . -exec stat --format='%n %A %U %G' {} \; | sort > listing
Exécutez cela dans les deux répertoires, puis comparez les deux fichiers de liste.
Vous sauve des maux de Perl ...
Assurez-vous que les 2 dossiers doivent être les mêmes récursivement dans une certaine mesure? Je pense que la rsync
commande est très puissante pour cela.
Dans votre cas, vous pouvez exécuter:
rsync -n -rpgov src_dir dst_dir
(-n is a must otherwise dst_dir will be modified )
Les différents fichiers ou dossiers seront répertoriés comme sortie de commande.
Vous pouvez voir le man rsync
pour une explication plus complète de ces options.
ls -al
affichera les autorisations, si les deux sont dans le même dossier, vous obtiendrez quelque chose comme ceci:
drwxr-xr-x 4 root root 4096 nov 28 20:48 temp
drwxr-xr-x 2 lucas 1002 4096 mrt 24 22:33 temp2
La 3ème colonne est le propriétaire, la 4ème est le groupe.
printf ("Permissions for %s and %s are not the same (%04o != %04o)\n", $file1, $file2, $mode1 &07777, $mode2 &07777) if ( $mode1 != $mode2);