Wie chmod 755 alle Verzeichnisse, aber keine Datei (rekursiv) ?
Wie kann man umgekehrt nur Dateien (rekursiv), aber kein Verzeichnis chmoden?
Um Verzeichnissen rekursiv Lese-&Ausführungsrechte zu geben:
find /path/to/base/dir -type d -exec chmod 755 {} +
Um Dateien rekursiv Leserechte zu erteilen:
find /path/to/base/dir -type f -exec chmod 644 {} +
Oder, wenn es viele Objekte zu verarbeiten gibt:
chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
Oder, um das Spawnen von chmod
zu reduzieren:
find /path/to/base/dir -type d -print0 | xargs -0 chmod 755
find /path/to/base/dir -type f -print0 | xargs -0 chmod 644
Ein häufiger Grund für diese Art von Dingen ist, Verzeichnisse auf 755, aber Dateien auf 644 zu setzen. In diesem Fall gibt es einen etwas schnelleren Weg als nik's find
Beispiel:
chmod -R u+rwX,go+rX,go-w /path
Bedeutet:
u+rwX
= Benutzer kann lesen, schreiben und ausführen;Wichtig ist hier, dass sich die Großschreibung X
anders verhält als die Kleinschreibung x
. Im Handbuch können wir lesen:
Die Ausführungs-/Suchbits, wenn die Datei ein Verzeichnis ist oder eines der Ausführungs-/Suchbits im ursprünglichen (unveränderten) Modus gesetzt sind.
Mit anderen Worten, chmod u+X für eine Datei setzt das Ausführungsbit nicht; und g+X setzt es nur, wenn es bereits für den Benutzer gesetzt ist.
Wenn Sie sicherstellen wollen, dass die Dateien auf 644 gesetzt sind und es Dateien im Pfad gibt, die das Ausführungskennzeichen haben, müssen Sie zuerst das Ausführungskennzeichen entfernen. +X entfernt das Ausführungskennzeichen nicht von Dateien, die es bereits haben.
Beispiel:
chmod -R ugo-x,u+rwX,go+rX,go-w path
Update: Dies scheint fehlzuschlagen, da die erste Änderung (ugo-x) das Verzeichnis nicht ausführbar macht, so dass alle Dateien darunter nicht geändert werden.