¿Cómo comparar propietarios y permisos de contenido de dos carpetas? ¿Hay algo como un diffcomando que compare recursivamente dos carpetas y muestre las diferencias de propietario y permisos?
10
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 statque desea comparar otros atributos de archivo.
Si los archivos no existen en el directorio2 pero existen en el directorio1, también habrá salida porque statserá diferente.
printf ("Permissions for %s and %s are not the same (%04o != %04o)\n", $file1, $file2, $mode1 &07777, $mode2 &07777) if ( $mode1 != $mode2);Buscar y estadísticas:
find . -exec stat --format='%n %A %U %G' {} \; | sort > listingEjecútelo en ambos directorios y luego compare los dos archivos de listado.
Te salva de los males de Perl ...
fuente
¿Se asegura de que las 2 carpetas deben ser las mismas de forma recursiva hasta cierto punto? Creo que el
rsynccomando es muy poderoso para eso.En su caso, puede ejecutar:
Los diferentes archivos o carpetas se enumerarán como salida del comando.
Puede ver
man rsyncuna explicación más completa de estas opciones.fuente
ls -almostrará los permisos, si ambos están en la misma carpeta obtendrá algo como esto:La tercera columna es el propietario, la cuarta es el grupo.
fuente
Si los dos directorios tienen la misma estructura y usted ha
treeinstalado, puede diferenciar los directorios haciendo:fuente