chmod-Dateien nur in allen Unterverzeichnissen

54

Bitte unterstützt mich jemand bei chmod, ich habe folgende Dateistruktur

-dir1
--file1
--file2
--dir1a
---file1a1
---file1a2
--dir1b
---file1b1
---file1b2

Wie kann ich 655 zu allen Dateien unter dir1 und all subdir chmod? Alle Dateien haben also die Berechtigung 655 und alle Verzeichnisse bleiben wie sie waren.

Danke

netic
quelle

Antworten:

108

Besser zu bedienen

find . -type f -exec chmod 655 -- {} +

Die andere vorgeschlagene Lösung von @sagarchalise funktioniert nicht, wenn Dateinamen Leerzeichen enthalten oder mit einem Bindestrich beginnen.

Enzotib
quelle
16
Um alle Verzeichnisse zu chmod können Sie find . -type d -exec chmod 755 {} +alle Verzeichnisse
Kris Harper
2
Wofür ist das +?
Brettski
3
@Brettski: Das +Zeichen wird um finddie Liste der Dateipfade (oder einen Teil davon, falls zu lang) erweitert.
Enzotib
3
Was ist das - für?
Orient
2
Das --zeigt das Ende der Befehlszeilenoptionen an. Auf diese Weise wird verhindert, dass eine Datei, die mit einem Bindestrich beginnt, als Befehlszeilenoption interpretiert wird, wie dies nach dem der Fall wäre --.
Tim Tisdall
8

Ich denke rein gehen dir1und

find . -type f | xargs chmod 655

werde den Trick machen.

sagarchalisieren
quelle
Dies funktioniert auch, aber ich habe eine Warnung mit "Keine solche Datei oder Verzeichnis"
netic
@manetic: es hängt, wie in meiner Antwort gesagt, von Dateinamen ab, die Leerzeichen enthalten.
Enzotib
4
Der Vollständigkeit halber ändern Sie es zu finden. -Typ f -print0 | xargs -0 chmod 655 würde das Space-Problem beheben, obwohl @enzotibs Antwort prägnanter ist
matt freake
Was Matt Freake sagte
Sergiy Kolodyazhnyy