Как сравнить владельцев и разрешения контента двух папок? Есть ли что-то вроде diff
команды, которая рекурсивно сравнивает две папки и отображает владельца и различия в правах доступа?
10
Решение, как и во всем, представляет собой 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
они будут другими.
printf ("Permissions for %s and %s are not the same (%04o != %04o)\n", $file1, $file2, $mode1 &07777, $mode2 &07777) if ( $mode1 != $mode2);
Найти и статистика:
find . -exec stat --format='%n %A %U %G' {} \; | sort > listing
Запустите это в обоих каталогах, затем сравните два списка файлов.
Спасает вас от зла Perl ...
источник
Вы уверены, что две папки должны быть в некоторой степени рекурсивными? Я думаю, что
rsync
команда очень мощная для этого.В вашем случае вы можете запустить:
Различные файлы или папки будут перечислены в качестве вывода команды.
Вы можете увидеть
man rsync
более полное объяснение этих опций.источник
ls -al
покажет разрешения, если они оба находятся в одной папке, вы получите что-то вроде этого:3-й столбец - владелец, 4-й - группа.
источник
Если две директории имеют одинаковую структуру и вы
tree
установили их, вы можете изменить каталоги, выполнив:источник