Membandingkan pemilik dan izin konten dua folder?

10

Bagaimana cara membandingkan pemilik dan izin konten dari dua folder? Apakah ada sesuatu seperti diffperintah yang membandingkan dua folder secara rekursif dan pemilik tampilan serta perbedaan izin?

J.Olufsen
sumber

Jawaban:

11

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 statjika Anda ingin membandingkan atribut file lainnya.

Jika file tidak ada di direktori2 tetapi ada di direktori1, juga akan ada output karena statakan berbeda.

cjc
sumber
Jika Anda ingin izin dicetak dalam gaya UNIX, ini berguna:printf ("Permissions for %s and %s are not the same (%04o != %04o)\n", $file1, $file2, $mode1 &07777, $mode2 &07777) if ( $mode1 != $mode2);
Marcus
3

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 ...

Ben
sumber
1
Kemudian hanya berbeda hasilnya :)
CrazyMerlin
1

Apakah Anda memastikan 2 folder harus sama secara rekursif sampai batas tertentu? Saya pikir rsyncperintahnya 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 rsyncpenjelasan lebih lengkap tentang opsi-opsi ini.

Bill Zhao
sumber
menggunakan src_dir / sebagai pengganti src_dir dalam perintah di atas akan membuat isinya hanya pemetaan ke isi dst_dir)
Bill Zhao
0

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.

Lucas Kauffman
sumber
Umm, bagaimana dengan isi temp dan temp2?
cjc
dua cara: buka 2 shell masuk ke kedua folder dan lakukan perintah ls -al yang sama, atau 1 shell dengan tmux atau hanya masuk ke satu folder lakukan perintah pergi ke yang lain dan lakukan perintah yang sama lagi.
Lucas Kauffman
2
Solusi ini tidak akan skala.
Artem Russakovskii
0

Jika dua direktori memiliki struktur yang sama dan Anda telah treemenginstal, Anda dapat membedakan direktori dengan melakukan:

diff <(tree -ap parent_dir_1) <(tree -ap parent_dir_2)
sk8asd123
sumber