Como comparar proprietários e permissões de conteúdo de duas pastas? Existe algo como diff
comando que compara recursivamente duas pastas e exibe as diferenças de proprietário e permissão?
10
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.
printf ("Permissions for %s and %s are not the same (%04o != %04o)\n", $file1, $file2, $mode1 &07777, $mode2 &07777) if ( $mode1 != $mode2);
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 ...
fonte
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:
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.fonte
ls -al
mostrará as permissões, se os dois estiverem na mesma pasta, você obterá algo como isto:A terceira coluna é o proprietário, a quarta é o grupo.
fonte
Se os dois diretórios tiverem a mesma estrutura e você tiver
tree
instalado, você poderá diferenciá-los fazendo:fonte