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?
10
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.
printf ("Permissions for %s and %s are not the same (%04o != %04o)\n", $file1, $file2, $mode1 &07777, $mode2 &07777) if ( $mode1 != $mode2);
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 ...
quelle
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:
Die verschiedenen Dateien oder Ordner werden als Befehlsausgabe aufgelistet.
Sie können das sehen ,
man rsync
für eine vollständigere Beschreibung dieser Optionen.quelle
ls -al
zeigt die Berechtigungen an, wenn sich beide im selben Ordner befinden, erhalten Sie ungefähr Folgendes:Die 3. Spalte ist der Eigentümer, die 4. ist die Gruppe.
quelle
Wenn die beiden Verzeichnisse dieselbe Struktur haben und Sie
tree
installiert haben, können Sie die Verzeichnisse wie folgt unterscheiden:quelle