Как сравнить владельцев и разрешения содержимого двух папок? Есть что-то вроде diff
команда, которая рекурсивно сравнивает две папки и отображает различия в владельце и разрешениях?
Решением, как и во всем остальном, является сценарий 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
один, если вы хотите сравнить другие атрибуты файла.
Если файлы не существуют в каталоге2, но существуют в каталоге1, также будет вывод, потому что stat
будет иначе.
Найдите и стат:
find . -exec stat --format='%n %A %U %G' {} \; | sort > listing
Запустите это в обоих каталогах, затем сравните два файла со списком.
Спасает вас от зла Perl ...
Вы уверены, что 2 папки должны быть рекурсивно одинаковыми? я думаю 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-й - группа.
Если два каталога имеют одинаковую структуру и у вас есть tree
установлен, вы можете различать каталоги, выполнив:
diff <(tree -ap parent_dir_1) <(tree -ap parent_dir_2)