chmod rekursiv nur auf Dateien ODER Verzeichnisse anwenden

Mit chmod -R xxx * werden bekanntlich die Rechte für alle Dateien und Verzeichnisse im aktuellen Verzeichnis und allen Unterverzeichnissen gesetzt.

Was nun, wenn nur Datei- oder Verzeichnisrechte geändert werden sollen? Beispielsweise in einem Webverzeichnis klassisch die Dateien auf 644, die Verzeichnisse auf 755.

Dies ist mit folgendem Trick möglich:

Dateien:

find . -type f -print0 | xargs -0 chmod 644

Verzeichnisse:

find . -type d -print0 | xargs -0 chmod 755

Mit find werden die den Kriterien entsprechenden Dateien gesucht, also in diesen zwei Fällen entweder Dateien = Files (f) oder Verzeichnisse = Directories (d). Der Punkt besagt, das im aktuellen Verzeichnis begonnen werden soll. Das Ergebnis wird dann via xargs an chmod übergeben.

Alternativ können auch folgende Befehle verwenden werden:

find . -type f -exec chmod 644 {} \;

find . -type d -exec chmod 755 {} \;

Hier soll es aber Probleme mit Datei- und Verzeichnisnamen geben, die Leerzeichen, Anführungszeichen oder Backslashes enthalten.