Привет ... Я ищу chmod 777 целую кучу файлов. В качестве альтернативы, поскольку это более безопасно, я мог бы также согласиться на chown www: www этих файлов, чтобы сделать их доступными в Интернете.
Теперь, когда у меня более 400 000 файлов, sudo chmod -R 777 ./*
и sudo chown -R www:www ./*
не работал вообще, возвращался только с "слишком длинным списком аргументов"
Появился какой-то поиск в Google find
и xargs
, но это не совсем сработало для моего набора файлов, так как некоторые файлы имели в имени символы подчеркивания. Я не уверен, почему это нарушило сценарий, но это случилось. Команда:
find ./ -name "*" | xargs chmod 777
Вот анонимный фрагмент дерева каталогов:
files
\- 28934723
\- file1.xml
\- file2.txt
\- 34905834
\- file1.xml
\- file2.txt
\- 21398230
\- file1.xml
\- file2.txt
Насколько я могу судить по man find
, он должен автоматически переходить в подкаталоги, но я не уверен. Когда я выполнил указанную выше команду, некоторые файлов изменились, но большинство каталогов остались прежними (с теми же разрешениями).
Заранее благодарим за любую помощь, которую вы можете предложить :)
sudo chown -R www:www ./
и если вы не хотите, чтобы каталог принадлежал www, просто верните его обратно.
Если вы можете помочь, попробуйте ограничить разрешения. Если вы пытаетесь предоставить полный доступ к www и используете систему redhat с доступным acl (может потребоваться перемонтировать), попробуйте:
setfacl -R -m user:www:rwx the_parent_directory
setfacl -d -R -m user:www:rwx the_parent_directory
и повторите с заменой пользователя на группу, если необходимо.
Если ваш список аргументов слишком длинный и вы не можете использовать полный каталог, тогда это сработает (но будет медленнее):
find . -type d -exec setfacl -d -R -m user:www:rwx '{}'; setfacl -R -m user:www:rwx '{}' \;
Если там будут файлы, не покрытые каталогами, вам нужно будет снова запустить его для них (я уверен, что кто-то скажет мне о переключении на setfacl, чтобы делать только верхний каталог):
find . -type f -exec setfacl -m user:www:rwx '{}' \;
Вы можете использовать тот же метод для 777 (аналогично xargs, но я предпочитаю этот способ, кажется более чистым:
find . -exec chmod 777 '{}' \;
что касается подчеркиваний, это не должно быть проблемой (возможно, они интерпретировались каналом или чем-то еще), но если они:
find . -name \*_\* -exec chmod 777 '{}' \;
Я не понимаю, почему следующая командная строка не может работать:
find . -print0 |xargs -0 chmod 777
Или проще, chmod 777 -R .