Ответы:
Решение, как и во всем, представляет собой 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 );
}
Посмотрите на http://perldoc.perl.org/functions/stat.html и http://perldoc.perl.org/File/Find.html дополнительную информацию, особенно ту, stat
если вы хотите сравнить другие атрибуты файла.
Если файлы не существуют в directory2, но существуют в directory1, также будет вывод, потому что stat
они будут другими.
Вы уверены, что две папки должны быть в некоторой степени рекурсивными? Я думаю, что rsync
команда очень мощная для этого.
В вашем случае вы можете запустить:
rsync -n -rpgov src_dir dst_dir
(-n is a must otherwise dst_dir will be modified )
Различные файлы или папки будут перечислены в качестве вывода команды.
Вы можете увидеть man rsync
более полное объяснение этих опций.
ls -al
покажет разрешения, если они оба находятся в одной папке, вы получите что-то вроде этого:
drwxr-xr-x 4 root root 4096 nov 28 20:48 temp
drwxr-xr-x 2 lucas 1002 4096 mrt 24 22:33 temp2
3-й столбец - владелец, 4-й - группа.
printf ("Permissions for %s and %s are not the same (%04o != %04o)\n", $file1, $file2, $mode1 &07777, $mode2 &07777) if ( $mode1 != $mode2);