Назад | Перейти на главную страницу

chmod из 400 000 файлов в нескольких подкаталогах?

Привет ... Я ищу 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 .