2つのフォルダーのコンテンツの所有者とアクセス許可を比較するにはどうすればよいですか?再帰的に2つのフォルダーを比較し、所有者と権限の違いを表示する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
です。
ファイルがdirectory2に存在せず、directory1に存在する場合、stat
が異なるため、ファイルも出力されます。
検索と統計:
find . -exec stat --format='%n %A %U %G' {} \; | sort > listing
それを両方のディレクトリで実行し、2つのリストファイルを比較します。
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列目はグループです。
2つのディレクトリが同じ構造で、tree
がインストールされている場合、次のようにしてディレクトリを比較できます。
diff <(tree -ap parent_dir_1) <(tree -ap parent_dir_2)