Jawaban:
Solusinya, seperti halnya semua hal, adalah skrip 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 );
}
Lihatlah http://perldoc.perl.org/functions/stat.html dan http://perldoc.perl.org/File/Find.html untuk info lebih lanjut, terutama stat
jika Anda ingin membandingkan atribut file lainnya.
Jika file tidak ada di direktori2 tetapi ada di direktori1, juga akan ada output karena stat
akan berbeda.
Temukan dan stat:
find . -exec stat --format='%n %A %U %G' {} \; | sort > listing
Jalankan itu di kedua direktori kemudian bandingkan dua file daftar.
Menghemat Anda dari kejahatan Perl ...
Apakah Anda memastikan 2 folder harus sama secara rekursif sampai batas tertentu? Saya pikir rsync
perintahnya sangat kuat untuk itu.
Dalam kasus Anda, Anda dapat menjalankan:
rsync -n -rpgov src_dir dst_dir
(-n is a must otherwise dst_dir will be modified )
File atau folder yang berbeda akan terdaftar sebagai output perintah.
Anda dapat melihat man rsync
penjelasan lebih lengkap tentang opsi-opsi ini.
ls -al
akan menampilkan izin, jika keduanya berada di folder yang sama Anda akan mendapatkan sesuatu seperti ini:
drwxr-xr-x 4 root root 4096 nov 28 20:48 temp
drwxr-xr-x 2 lucas 1002 4096 mrt 24 22:33 temp2
Kolom ke-3 adalah pemilik, ke-4 adalah grup.
printf ("Permissions for %s and %s are not the same (%04o != %04o)\n", $file1, $file2, $mode1 &07777, $mode2 &07777) if ( $mode1 != $mode2);