Linux: установить разрешение только для каталогов

Мне нужно изменить разрешения каталога htdocs в apache на определенную группу и с помощью определенных операций чтения/записи/выполнения.

В каталогах должно быть 775 разрешений, а файлы должны иметь 664.

Если я рекурсивный 664 на htdocs, то все файлы и каталоги будут изменяться на 664.

Я не хочу менять каталоги вручную.

Есть ли способ изменить только файлы или каталоги?

Ответ 1

Используйте опцию find -type, чтобы ограничить действия файлами и каталогами. Используйте параметр -o, чтобы указать альтернативные действия для разных типов, поэтому вам нужно запускать find один раз, а не отдельно для каждого типа.

find htdocs -type f -exec chmod 664 {} + -o -type d -exec chmod 775 {} +

Ответ 2

chmod может фактически сделать это сам; символическое разрешение X означает "выполнить, если это имеет смысл", что обычно означает каталоги, но не файлы. Итак, вы можете использовать:

chmod -R u=rwX,go=rX /path/to/htdocs

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

Ответ 3

Используйте find для поиска каталогов и применения chmod на них:

find -type d | xargs chmod 775

Использовать тип f для файла:

find -type f | xargs chmod 775

Ответ 4

Ответ Gordon выше правильно, но если вы пытаетесь заблокировать доступ к дереву каталогов, он оставляет исполняемые исполняемые файлы для владельца также исполняемым для тех, кому предоставлен капитал X.

Используя

find -type d exec chmod 775 {} +

или

find -type d exec chmod 755 {} +

безопаснее.

Ответ 5

попробовать:

find htdocs -type d -exec chmod 775 {} +

Ответ 6

Я использую нечто похожее на решение, предоставленное Гордоном:

chmod -R ug=rw,o=r,a+X /path/to/folder/

Он всегда должен устанавливать 775 для папок и 664 для файлов, даже если разрешение на выполнение было предварительно установлено для некоторого файла