Respuestas:
La solución, como con todas las cosas, es 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 );
}
Mire http://perldoc.perl.org/functions/stat.html y http://perldoc.perl.org/File/Find.html para obtener más información, particularmente la stat
que desea comparar otros atributos de archivo.
Si los archivos no existen en el directorio2 pero existen en el directorio1, también habrá salida porque stat
será diferente.
Buscar y estadísticas:
find . -exec stat --format='%n %A %U %G' {} \; | sort > listing
Ejecútelo en ambos directorios y luego compare los dos archivos de listado.
Te salva de los males de Perl ...
¿Se asegura de que las 2 carpetas deben ser las mismas de forma recursiva hasta cierto punto? Creo que el rsync
comando es muy poderoso para eso.
En su caso, puede ejecutar:
rsync -n -rpgov src_dir dst_dir
(-n is a must otherwise dst_dir will be modified )
Los diferentes archivos o carpetas se enumerarán como salida del comando.
Puede ver man rsync
una explicación más completa de estas opciones.
ls -al
mostrará los permisos, si ambos están en la misma carpeta obtendrá algo como esto:
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 tercera columna es el propietario, la cuarta es el grupo.
printf ("Permissions for %s and %s are not the same (%04o != %04o)\n", $file1, $file2, $mode1 &07777, $mode2 &07777) if ( $mode1 != $mode2);