-R не работает с chmod?

Меня попросили сделать так, чтобы все HTML-файлы, которыми я владею, имели следующие разрешения: RW-RW-R-- (по-моему, 664, в настоящее время они 644).

Итак, я запустил это:

$ chmod -R 664 *.html

И изменились только те html файлы, которые были в этой папке (зашел в подпапку и проверил там разрешения, они не изменились). Мне нужно изменить все файлы, которые у меня есть, поэтому я запустил это из папки верхнего уровня.

Моя команда неверна? Это какие-то настройки сервера? Я считаю, что я сделал это раньше, но я не могу заставить его работать сейчас.


person SSaaM    schedule 16.08.2013    source источник


Ответы (1)


С командой:

chmod -R 664 *.html

Оболочка расширит указанные пути к файлам (*.html) и будет работать только с ними. Это будут все html-файлы в текущем каталоге. Он не будет перемещаться по каталогам, если у вас нет каталога, соответствующего этому шаблону, и в этом случае все в этой папке будет изменено.

Чтобы сделать то, что вы хотите сделать, вам нужно использовать find:

find . -name "*.html" -exec chmod 664 {} \;

Если html-файлы, которые вы хотите изменить, находятся всего на один или два уровня ниже, вы можете сделать что-то вроде этого:

chmod 664 *.html */*.html */*/*.html

и т.д. Но find будет общим решением.

person lurker    schedule 16.08.2013
comment
Спасибо, это сработало, и приятно узнать о дополнительных аргументах папки. Я приму, когда смогу. - person SSaaM; 16.08.2013
comment
find . -name \*.html -print0 | xargs -0 chmod 664 также работает и вызывает chmod только один раз (или несколько раз) для нескольких файлов. (Иоахим Исакссон опубликовал это как ответ, а затем по какой-то причине удалил его.) - person Keith Thompson; 16.08.2013
comment
Спасибо @KeithThompson. Обычно я просто печатаю более короткую версию, так как производительность на этом уровне не всегда является проблемой. Я полагаю, Иоахим удалил свой ответ, потому что он был заметно длиннее. Но я согласен: это предоставило ценную альтернативу. - person lurker; 16.08.2013