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?

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.


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


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.


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.


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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.