Wie vergleiche ich Eigentümer und Berechtigungen von Inhalten zweier Ordner? Gibt es so etwas wie einen diff
Befehl, der zwei Ordner rekursiv vergleicht und Eigentümer- und Berechtigungsunterschiede anzeigt?
Wie vergleiche ich Eigentümer und Berechtigungen von Inhalten zweier Ordner? Gibt es so etwas wie einen diff
Befehl, der zwei Ordner rekursiv vergleicht und Eigentümer- und Berechtigungsunterschiede anzeigt?
Antworten:
Die Lösung ist wie bei allen Dingen ein Perl-Skript:
#!/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 );
}
Weitere Informationen finden Sie unter http://perldoc.perl.org/functions/stat.html und http://perldoc.perl.org/File/Find.html , insbesondere stat
wenn Sie andere Dateiattribute vergleichen möchten.
Wenn Dateien nicht in Verzeichnis2, sondern in Verzeichnis1 vorhanden sind, wird sie auch ausgegeben, da stat
sie unterschiedlich sind.
Finden und stat:
find . -exec stat --format='%n %A %U %G' {} \; | sort > listing
Führen Sie dies in beiden Verzeichnissen aus und vergleichen Sie dann die beiden Auflistungsdateien.
Rettet dich vor den Übeln von Perl ...
Stellen Sie sicher, dass die beiden Ordner bis zu einem gewissen Grad rekursiv identisch sind? Ich denke, der rsync
Befehl ist dafür sehr mächtig.
In Ihrem Fall können Sie ausführen:
rsync -n -rpgov src_dir dst_dir
(-n is a must otherwise dst_dir will be modified )
Die verschiedenen Dateien oder Ordner werden als Befehlsausgabe aufgelistet.
Sie können das sehen , man rsync
für eine vollständigere Beschreibung dieser Optionen.
ls -al
zeigt die Berechtigungen an, wenn sich beide im selben Ordner befinden, erhalten Sie ungefähr Folgendes:
drwxr-xr-x 4 root root 4096 nov 28 20:48 temp
drwxr-xr-x 2 lucas 1002 4096 mrt 24 22:33 temp2
Die 3. Spalte ist der Eigentümer, die 4. ist die Gruppe.
printf ("Permissions for %s and %s are not the same (%04o != %04o)\n", $file1, $file2, $mode1 &07777, $mode2 &07777) if ( $mode1 != $mode2);