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.
printf ("Permissions for %s and %s are not the same (%04o != %04o)\n", $file1, $file2, $mode1 &07777, $mode2 &07777) if ( $mode1 != $mode2);
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 ...
la source
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:
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.la source
ls -al
affichera les autorisations, si les deux sont dans le même dossier, vous obtiendrez quelque chose comme ceci:La 3ème colonne est le propriétaire, la 4ème est le groupe.
la source
Si les deux répertoires ont la même structure et que vous avez
tree
installé, vous pouvez différencier les répertoires en faisant:la source