Vergleich von Zugriffsrechten

IT-Sofa

Cadet 2nd Year
Dabei seit
Apr. 2016
Beiträge
17
Hallo,

wie könnte man zwei Verzeichnisse mit gleichem Inhalt hinsichtlich der Zugriffsrechte miteinander vergleichen?

Beispiel: testdatei.txt

liegt in

Verzeichnis_A/testdatei.txt

und

Verzeichnis_B/testdatei.txt


Wenn sich die Zugriffsrechte der beiden Dateien unterscheiden, soll eine Ausgabe/Meldung erfolgen.
 

Candy_Cloud

Vice Admiral
Dabei seit
März 2015
Beiträge
6.211
Auf Basis welches Systems? AD?

Wenn kein AD für die Verwaltung der Rechte vorliegt, dann herrscht vermutlich absoluter Wildwuchs bei den Rechten und das wird hart zu vergleichen sein. Generell sind Rechte auf Dateiebene immer kritisch und praktisch das unsicherste was man haben kann. Vor allem wenn Personen ohne Gruppen berechtigt wurden.

Generell kann man solche Funktionen in VBA abbilden und es gibt diverse Excelsheets mit Makros die so etwas können.
Da für meine Arbeit die Teile immer teuer in Auftrag gegeben werden, kann ich leider auf nichts kostenloses verweisen.
 

IT-Sofa

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Apr. 2016
Beiträge
17
Gemeint ist ein Linux-System (Debian 8) und ein Vergleich mit Bash-Tools oder GUI-Programmen wie Meld.

Vielen Dank für die schnellen Reaktionen aber Tipps in Microsoft-Umgebungen bringen mich hier nicht weiter, sorry.
 
C

computerfrust

Gast
Hab mal ein kleines Script geschrieben. Geht bestimmt noch eleganter, funktioniert aber:
Code:
dir1=
dir2=

for i in "$dir1/"*; do
  p1=$(stat -c %A "$i")
  p2=$(stat -c %A "$dir2/${i##*/}")
  if [[ ! "$p1" == "$p2" ]]; then
    echo "$p1 $i"
    echo "$p2 $dir2/${i##*/}"
  fi
done
 

mensch183

Captain
Dabei seit
Jan. 2008
Beiträge
3.666
Nur die klassischen Unix-Zugriffsrechte sollen vergleichen werden? Dann eben diese von jeweils beiden Files ermitteln (stat -c '%A' filename) und die Zeichenketten (sowas wie "-rwsr-xr-x") miteinander vergleichen. Für 2 Verzeichnisse ungefähr so:

#!/bin/bash
verz1=~/bla
verz2=~/blubb
cd $verz1
for i in * ; do
s1=`stat -c '%A' "$i"`
s2=`stat -c '%A' $verz2/"$i"`
[ "$s1" != "$s2" ] && echo ungleich bei: "$i"
done

Ungetestet, aber die Idee kommt hoffentlich rüber. Das funzt so nur, wenn die Files wirklich in beiden Verzeichnisse vorhanden sind. Sonst brauchts noch paar zusätzliche Tests und ggf. die Unterdrückung von Fehlerausgaben der stat-Kommandos.
 

IT-Sofa

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Apr. 2016
Beiträge
17
Was bewirken die Rauten bei ${i##*/} :confused_alt:


Ungetestet, aber die Idee kommt hoffentlich rüber
Getestet und funktioniert.

Ich habe das Skript etwas erweitert, so das es auch rekursiv läuft:
Code:
#!/bin/bash
shopt -s globstar nullglob dotglob 

verz1=
verz2=
cd $verz1
for i in **; do
    s1=`stat -c '%A' "$i"`
    s2=`stat -c '%A' $verz2/"$i"`
    [ "$s1" != "$s2" ] && echo ungleich bei: "$i"
done
Wenn man alle Dateien in Verz1 und Verz2 berücksichtigen will, muss man die for-Schleife für beide Verzeichnissen ausführen. Momentan tausche in verz1 und verz2 bei einem zweiten Durchlauf einfach aus - so erhält man eine Übersicht der Dateien, die nur in Verz1 bzw. Verz2 vorhanden sind, und somit nicht geprüft worden sind (der stat gibt in diesem Fall eine Fehlermeldung aus. Geht sicher auch eleganter.).
 
Zuletzt bearbeitet:
Top