Respostas:
A solução, como em todas as coisas, é um 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 );
}
Veja http://perldoc.perl.org/functions/stat.html e http://perldoc.perl.org/File/Find.html para obter mais informações, especialmente a stat
que você deseja comparar com outros atributos de arquivo.
Se os arquivos não existirem no diretório2, mas existirem no diretório1, também haverá saída porque os arquivos stat
serão diferentes.
Localização e status:
find . -exec stat --format='%n %A %U %G' {} \; | sort > listing
Execute isso nos dois diretórios e compare os dois arquivos de listagem.
Salva você dos males de Perl ...
Você garante que as 2 pastas sejam as mesmas recursivamente até certo ponto? Eu acho que o rsync
comando é muito poderoso para isso.
No seu caso, você pode executar:
rsync -n -rpgov src_dir dst_dir
(-n is a must otherwise dst_dir will be modified )
Os diferentes arquivos ou pastas serão listados como a saída do comando.
Você pode ver man rsync
uma explicação mais completa dessas opções.
ls -al
mostrará as permissões, se os dois estiverem na mesma pasta, você obterá algo como isto:
drwxr-xr-x 4 root root 4096 nov 28 20:48 temp
drwxr-xr-x 2 lucas 1002 4096 mrt 24 22:33 temp2
A terceira coluna é o proprietário, a quarta é o grupo.
printf ("Permissions for %s and %s are not the same (%04o != %04o)\n", $file1, $file2, $mode1 &07777, $mode2 &07777) if ( $mode1 != $mode2);