Как я могу сделать рекурсивный chmod только для каталогов?

31

Я хочу изменить разрешения для дерева в Centos 4, чтобы добавить разрешения на выполнение для всех каталогов рекурсивно из каталога. Если я использую обычный chmod, файлы, кроме каталогов, также изменяются:

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

Как я могу влиять только на каталоги?

WilliamKF
источник

Ответы:

48

Запуск findна -type d( каталогах ) с -execпервичным для выполнения chmodтолько по папкам:

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

Чтобы убедиться, что он работает только с нужными объектами, вы можете запустить только find /your/path/here -type dсначала; он просто распечатает найденные каталоги.

Даниэль Бек
источник
Не могли бы вы объяснить, что {} \; делает?
Srekel
2
@Srekel смотри этот ответ askubuntu.com/questions/339015/…
MADforFUNandHappy
17

См. Примеры командной строки - chmod в Википедии.

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

Как добавил Даниэль, это должно работать в вашем случае:

chmod -R o+X directory
mmdemirbas
источник
Это повлияет на текущие права доступа к файлам в каталогах.
scriptmonster
@scriptmonster указанная строка неверна для этого случая, но chmod -R o+X directoryдолжна работать для OP.
Даниэль Бек
1
Для тех, кто интересуется разницей, как я, это то, что X также будет применять разрешения на выполнение к любому файлу, для которого уже установлен хотя бы один бит разрешения на выполнение (пользователь, группа или другой). В общем случае принятый ответ лучше.
ixe013
1
find /home/mydir -type d | xargs chmod ugo+rx

Это работает на CentOS6, который не находит выше -exec. По сути, он просто передает список каталогов команде xargs, которая отправляет их в chmod. Затем chmod устанавливает универсальное чтение и выполнение (поиск) по каталогам. Чтобы сделать это для всех пользователей дома, используйте sudo:

sudo sh -c "find /home/ -type d | xargs chmod ugo+rx"
Марк Уайт
источник