xargs + chmod - файл или каталог не найден

xargs + chmod - файл или каталог не найден

Я пытаюсь рекурсивно изменить права доступа ко всем файлам и каталогам в моем проекте.

Я нашелпост на форуме 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 {} +

это каноническое переносимое решение, которое обрабатывает даже символы новой строки в именах файлов.

Связанный контент