
Я пытаюсь рекурсивно изменить права доступа ко всем файлам и каталогам в моем проекте.
Я нашелпост на форуме magentoговоря, что я могу использовать эти команды:
find ./ -type f | xargs chmod 644
find ./ -type d | xargs chmod 755
chmod -Rf 777 var
chmod -Rf 777 media
Это сработало для find ./ -type d | xargs chmod 755
.
Команда find ./ -type f
вернула много файлов, но я попадаю chmod: access to 'fileXY.html' not possible: file or directory not found
на все файлы, если выполняю find ./ -type f | xargs chmod 644
.
Как мне решить эту проблему?
PS: Я знаю, что он рекомендовал использовать права 777 для моих папок var и media, что представляет угрозу безопасности, но что еще нам следует использовать?
решение1
Я предполагаю, что вы сталкиваетесь с файлами, имена которых содержат символы, которые приводят xargs
к их разделению,напримерпробелы. Чтобы решить эту проблему, предполагая, что вы используете версию find
и xargs
, которая поддерживает соответствующие параметры (которые возникли в вариантах GNU и не указаны в POSIX), вам следует использовать следующие команды:
find . -type f -print0 | xargs -0 chmod 644
find . -type d -print0 | xargs -0 chmod 755
или еще лучше,
chmod -R a-x,a=rX,u+w .
который имеет преимущества в том, что он короче, использует только один процесс и поддерживаетсяPOSIXchmod
(видетьэтот ответдля получения подробной информации).
Ваш вопрос по media
и var
довольно обширен, если вас интересуют конкретные ответы, предлагаю вам задать его как отдельный вопрос с более подробной информацией о том, как вы используете каталоги.
решение2
Как насчет:
find ./ -type d -exec chmod 755 {} +
это каноническое переносимое решение, которое обрабатывает даже символы новой строки в именах файлов.