¿Cómo comparar propietarios y permisos de contenido de dos carpetas? ¿Hay algo como un diff
comando 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 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.
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 > listing
Ejecú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
rsync
comando 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 rsync
una explicación más completa de estas opciones.fuente
ls -al
mostrará 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
tree
instalado, puede diferenciar los directorios haciendo:fuente