Jak mogę zrobić rekursywny chmod tylko w katalogach?

31

Chcę zmienić uprawnienia do drzewa w Centos 4, aby dodać uprawnienia do wykonywania dla wszystkich katalogów rekurencyjnie z katalogu. Jeśli użyję normalnego chmod, pliki inne niż katalogi również zostaną zmodyfikowane:

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

Jak mogę wpływać tylko na katalogi?

WilliamKF
źródło

Odpowiedzi:

48

Uruchom findna -type d( katalogach ) z -execpodstawowym, aby wykonać chmodtylko na folderach:

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

Aby mieć pewność, że wykonuje to tylko na pożądanych obiektach, możesz uruchomić tylko find /your/path/here -type dpierwszy; po prostu wydrukuje znalezione katalogi.

Daniel Beck
źródło
Czy możesz wyjaśnić, co {} \; robi?
Srekel,
2
@ Skrekel zobacz tę odpowiedź askubuntu.com/questions/339015/…
MADforFUNandHappy
17

Zobacz przykłady wiersza poleceń - chmod w Wikipedii.

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

Dodane przez Daniela: powinno to działać w twoim przypadku:

chmod -R o+X directory
mmdemirbas
źródło
Wpłynęłoby to na bieżące uprawnienia plików w katalogach.
scriptmonster
@scriptmonster cytowany wiersz jest niepoprawny w tym przypadku, ale chmod -R o+X directorypowinien działać dla PO.
Daniel Beck
1
Dla tych, którzy zastanawiają się nad różnicą, tak jak ja, X zastosuje również uprawnienia do wykonania do każdego pliku, który ma już ustawiony co najmniej jeden bit uprawnień do wykonywania (użytkownik, grupa lub inny). W ogólnym przypadku zaakceptowana odpowiedź jest lepsza.
ixe013
1
find /home/mydir -type d | xargs chmod ugo+rx

Działa to na CentOS6, czego nie można znaleźć w powyższym pliku -exec. Zasadniczo po prostu przesyła listę katalogów do polecenia xargs, które wysyła je do chmod. Następnie chmod ustawia uniwersalne czytanie i wykonywanie (wyszukiwanie) w katalogach. Aby to zrobić dla wszystkich użytkowników w domu, użyj sudo:

sudo sh -c "find /home/ -type d | xargs chmod ugo+rx"
Mark White
źródło