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?

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.


Können Sie erklären, was {} \; tut?
Srekel


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

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"
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.