Bagaimana cara membandingkan pemilik dan izin konten dari dua folder? Apakah ada sesuatu seperti diff
perintah yang membandingkan dua folder secara rekursif dan pemilik tampilan serta perbedaan izin?
10
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.
printf ("Permissions for %s and %s are not the same (%04o != %04o)\n", $file1, $file2, $mode1 &07777, $mode2 &07777) if ( $mode1 != $mode2);
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 ...
sumber
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:
File atau folder yang berbeda akan terdaftar sebagai output perintah.
Anda dapat melihat
man rsync
penjelasan lebih lengkap tentang opsi-opsi ini.sumber
ls -al
akan menampilkan izin, jika keduanya berada di folder yang sama Anda akan mendapatkan sesuatu seperti ini:Kolom ke-3 adalah pemilik, ke-4 adalah grup.
sumber
Jika dua direktori memiliki struktur yang sama dan Anda telah
tree
menginstal, Anda dapat membedakan direktori dengan melakukan:sumber