Wie kann ich ein rekursives chmod nur für Verzeichnisse ausführen?

31

Ich möchte die Berechtigungen für einen Baum in Centos 4 ändern, um Ausführungsberechtigungen für alle Verzeichnisse rekursiv aus einem Verzeichnis hinzuzufügen. Wenn ich normales chmod verwende, werden auch andere Dateien als Verzeichnisse geändert:

chmod -R o+x /my/path/here

Wie kann ich nur Verzeichnisse beeinflussen?

WilliamKF
quelle

Antworten:

48

Führen Sie findam -type d( Verzeichnisse ) mit dem -execprimären chmodOrdner aus , um nur die Ordner auszuführen :

find /your/path/here -type d -exec chmod o+x {} \;

Um sicherzugehen, dass es nur für die gewünschten Objekte ausgeführt wird, können Sie nur find /your/path/here -type dzuerst ausführen . Die gefundenen Verzeichnisse werden einfach ausgedruckt.

Daniel Beck
quelle
Können Sie erklären, was {} \; tut?
Srekel
2
@Srekel diese Antwort sehen askubuntu.com/questions/339015/…
MADforFUNandHappy
17

Siehe Befehlszeilenbeispiele - chmod in der Wikipedia.

chmod -R a-x+X directory    remove the execute permission on all files in 
                            a directory tree, while allowing for directory browsing.

Wie von Daniel hinzugefügt: Dies sollte in Ihrem Fall funktionieren:

chmod -R o+X directory
mmdemirbas
quelle
Dies würde sich auf die aktuellen Berechtigungen von Dateien in Verzeichnissen auswirken.
Scriptmonster
@scriptmonster Die angegebene Zeile ist in diesem Fall falsch, chmod -R o+X directorysollte aber für das OP funktionieren.
Daniel Beck
1
Für diejenigen, die sich wie ich über den Unterschied wundern, ist es so, dass X auch Ausführungsberechtigungen auf jede Datei anwendet, für die bereits mindestens ein Ausführungsberechtigungsbit gesetzt ist (entweder Benutzer, Gruppe oder anderes). Im Allgemeinen ist die akzeptierte Antwort besser.
ixe013
1
find /home/mydir -type d | xargs chmod ugo+rx

Dies funktioniert unter CentOS6, was das oben genannte find -exec nicht tut. Grundsätzlich leitet es die Verzeichnisliste einfach an den Befehl xargs weiter, der sie an chmod sendet. Das chmod setzt dann das universelle Lesen und Ausführen (Suchen) für die Verzeichnisse. So verwenden Sie sudo für alle Benutzer zu Hause:

sudo sh -c "find /home/ -type d | xargs chmod ugo+rx"
Mark White
quelle