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

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.


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.