Vergleichen Sie Eigentumsverhältnisse und Berechtigungen aller Dateien in 2 Verzeichnissen in Bash

Vergleichen Sie Eigentumsverhältnisse und Berechtigungen aller Dateien in 2 Verzeichnissen in Bash

Ich versuche, die Dateieigentümer und Berechtigungen aller Dateien in 2 Verzeichnissen abzurufen und zu vergleichen. Datei mit gleichem Namen, aber unterschiedlichen Dateieigentümern oder Berechtigungen melden. Ich habe die Dateieigentümer und Berechtigungen aller Dateien im ersten Verzeichnis in file1.txt und im zweiten Verzeichnis in file2.txt abgerufen.

Mein Skriptfortschritt:

[root@test]# cat file1.txt
644 root root /home/user2/sample-test/abc
644 root root /home/user2/sample-test/bcd
644 root root /home/user2/sample-test/efg
644 root root /home/user2/sample-test/mama
644 root root /home/user2/sample-test/ngins2
644 root root /home/user2/sample-test/nils45
644 root root /home/user2/sample-test/sample2
644 root root /home/user2/sample-test/t1
644 root root /home/user2/sample-test/t2
644 root root /home/user2/sample-test/test1
755 root root /home/user2/sample-test
644 root root /home/user2/sample-test1/abc
644 root root /home/user2/sample-test1/ppp
644 root root /home/user2/sample-test1/werwre
755 root root /home/user2/sample-test1
644 root root /home/user2/testing123

[root@test]# cat file2.txt
644 root root /home/user2/sample-test/ip
644 root root /home/user2/sample-test/new-file
644 root root /home/user2/sample-test/ngins2
644 root root /home/user2/sample-test/nils45
644 root root /home/user2/sample-test/sample2
755 root root /home/user2/sample-test
755 root root /home/user2/sample-test/test1.sh
644 apache apache /home/user2/sample-test1/ppp
644 apache fes /home/user2/sample-test1/abc
644 root root /home/user2/sample-test1/perms.saved
644 root root /home/user2/sample-test1/test
644 root root /home/user2/sample-test1/test1
644 root root /home/user2/sample-test1/werwre
755 root root /home/user2/sample-test1
755 root root /home/user2/sample-test1/1.sh
644 root root /home/user2/testing123


find /path/to/dir1 -depth -exec stat --format '%a %U %G %n' {} + | sort -n" >> file1.txt
find /path/to/dir2 -depth -exec stat --format '%a %U %G %n' {} + | sort -n" >> file2.txt

t1=`cat file1.txt`
t5=`cat file2.txt`

#find lines only in file1
only1=$(comm -23 "$t1"_sorted "$t5"_sorted)

#find lines only in file2
only2=$(comm -13 "$t1"_sorted "$t5"_sorted)

Ich stehe vor Herausforderungen beim Umgang mit diesen beiden Situationen:

  1. Wenn eine Datei in dir1 oder dir2 fehlt, sollte dies behandelt werden. Gehen Sie davon aus, dass die Dateien in dir1 korrekt sind und die Dateien in dir2 falsche Berechtigungen/Besitzer haben. Ich möchte nur Dateien vergleichen, die in dir1 und dir2 denselben Namen, aber unterschiedliche Besitzer/Berechtigungen haben.

Antwort1

Probelauf zur Ermittlung der Unterschiede

Diese Kommandozeile rsyncfunktioniert bei mir mit ähnlichen Verzeichnisbäumen,

rsync -Havvn --existing source/ target | grep -v uptodate$'

Aktion

Entfernen Sie die Option, num eine Aktion auszuführen.


Sie müssen die Befehlszeile so anpassen, dass sie in Ihrem Fall mit den Hauptverzeichnissen übereinstimmt (möglicherweise mit Remote-Pfad über SSH). Es gibt zwei v's, um die Ausführlichkeit zu erhöhen und eine Ausgabe zu erhalten, bei der sich nur die ausführbaren Flags unterscheiden; bei der Aktion wird das Problem ohne Ausführlichkeitsflags behoben.

verwandte Informationen