Я хотел бы рекурсивно изменить каталог так, чтобы:
Как сделать лучше, короче, наряднее? :) Может как-нибудь использовать umask?
Все find
решения слишком длинные: я всегда заканчиваю Copy-Paste :)
В зависимости от вашей версии chmod вы можете сделать это:
chmod -R . ug+rwX,o+rX,o-w
Обратите внимание капитал X. Это устанавливает исполняемый бит для каталогов и файлов, в которых уже установлен какой-либо бит выполнения.
Обратите внимание, что вы можете использовать только заглавную X с '+', но не '=' или '-'.
Лучше, короче, красивее, чем что?
cd /directory
find . -type d -exec chmod 0755 {} +
find . -type f -exec chmod 0664 {} +
Добавление одного лайнера в смесь
find -type f -exec chmod 0644 {} + -o -type d -exec chmod 0755 {} +
find /dir -type f -print0 |xargs -0 chmod 0644
find /dir -type d -print0 |xargs -0 chmod 0775
Протестируйте его перед использованием в реальной среде
Я использую это для всего, что скопировано из файловых систем FAT:
chmod -R a-x+X .
Если это не работает, например, в Mac OS X, попробуйте версию команды GNU chmod
:
gchmod -R a-x+X .
Не зная больше о том, почему вы пытаетесь это сделать, наиболее распространенные причины, по которым люди склонны использовать:
Файлы и каталоги доступны для записи
chmod -R o-w /path/to/dir
Файлы и каталоги не подлежат групповой записи
chmod -R g+w /path/to/dir
Или объедините два:
chmod -R o-w,g+w /path/to/dir
В качестве альтернативы, если вы хотите, чтобы файлы и каталоги имели правильные разрешения по умолчанию, измените процесс создания umask
.
По сути, это редкий день, когда правильно использовать числовые режимы с chmod
; как правило, в каталогах уже установлен исполняемый бит, а в файлах, которым он не нужен, он отсутствует, так зачем вообще возиться с ним, когда +
и -
операторы избавляют от необходимости это делать?