Linux und Windows HelpDesk

Datei-/Verzeichnis-Rechte oder User/Group unter Linux rekursiv ändern.

Es kann vorkommen, dass man für ganze Verzeichnisse inkl. Unterverzeichnissen oder sogar für ein komplettes Laufwerk die Dateirechte oder die User/Group ändern muss.
Es gibt mehrere Ansätze dies umzusetzen ein recht einfacher Weg ist die Verwendung von find auf der Linux Console, da man die Suche so sehr genau eingrenzen kann. Man muss für jede Veränderung an Dateien oder Verzeichnissen im Besitz entsprechender Schreibberechtigung sein. Also Besitzer, schreibberechtigte Gruppe oder natürlich root, wovon ich der Einfachheit halber in meinen Beispielen ausgehe.

Mit dem ersten Befehl, wird allen Dateien im angegebenen Pfad das Dateirecht 644 gegeben. Der zweite Befehl vergibt das Recht 755 im selben Pfad an alle Verzeichnisse.

# find /mnt/sde/ -type f -exec chmod 644 {} \;
# find /mnt/sde/ -type d -exec chmod 755 {} \;

Sollen die Änderung auf bestimmte Dateitypen (hier pdf-Dateien) beschränkt sein, so gibt man den Befehl auf diese Art ein.

# find /mnt/sde/ -iname "*.pdf" -exec chmod 644 {} \;

Mit dem folgenden Aufruf werden nur doc-Dateien geändert, welche dem Besitzer "hans" gehören und deren Dateiname auf "arbeit" endet, wie es z.B. bei Hausarbeit.doc der Fall wäre.

# find /mnt/sde/ -iname "*arbeit.doc" -user hans -exec chmod 644 {} \;

Und so kann die Suche immer weiter präzisiert werden wie in diesem Beispiel. Es werden nur mp4-Dateien die mit "Urlaub" beginnen geändert, dem Besitzer "hans" gehören und größer als 100MiB sind. In diesem Beispiel wird das Case sensitive "-name" anstelle von "-iname" verwendet und somit würde die Datei "Urlaub_2022.mp4" geändert werden, wenn alle anderen Punkte auch zutreffen, die Datei "urlaub_2024.MP4" würde aber nicht berücksichtigt werden.

# find /mnt/sde/ -name "Urlaub*.mp4" -user hans -size +100M -exec chmod 644 {} \;

In der gleichen Art und Weise können auch Besitzer oder Gruppen der Dateien bzw. Verzeichnisse geändert werden, wenn der chmod Aufruf gegen chown ausgetauscht wird. Die zu verwendenden User und Gruppe ist natürlich individuell Anzugeben.

# find /mnt/sde/ -type f -exec chown user:group {} \;
# find /mnt/sde/ -type d -exec chown user:group {} \;
Das verwenden von find mit der Option -exec hat den Vorteil, dass man nicht auf bestimmte Befehle beschränkt ist. Anstelle der hier gezeigten chmod und chown kann auch jeder andere Shellbefehl auf die gefundenen Dateien bzw. Verzeichnisse, angewendet werden.