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 {} \; |