#linux #directory #chmod
#linux #каталог #chmod
Вопрос:
Я пытаюсь изменить разрешение папки для каждой папки на моем сайте, но не для файлов.
Я могу перечислить их, выполнив ls -l | egrep '^d'
, но есть ли какой-либо способ сделать это:
chmod 751 | egrep '^d'
я получаю сообщение об ошибке, поскольку chmod ожидает 3 параметра, но я не уверен, как предоставить ему результаты из egrep.
Я пытался обмануть, используя chmod 751 -R *.*
, но у меня есть несколько папок с «.» в названии, так что это не сработает.
Ответ №1:
Я думаю, это должно сработать:
find . -type d -exec chmod 751 {} ;
Комментарии:
1. Обратите внимание, что команда является рекурсивной и также будет выполняться для вложенных каталогов (пример OP касается только текущего каталога). Чтобы ограничить текущий каталог, используйте
--maxdepth
опцию.
Ответ №2:
Если у вас есть способ перечислить нужные элементы для изменения, вы всегда можете включить его $()
(или обратные ссылки), чтобы этот бит был выполнен первым и помещен в качестве параметров, например:
chmod 751 $(ls -l | egrep '^d')
Комментарии:
1. Я взял это из его вопроса, но случайно пропустил первый бит.
2. Еще одна проблема заключается в том, что он не будет правильно обрабатывать имена файлов с пробелами и будет выдавать ошибку «список аргументов слишком длинный», если файлов слишком много.
3. Весь мой смысл был в том, «если у вас есть способ перечислить нужные элементы».. Он сказал, что запустил его, и он показал, что он хотел. Я просто предоставил ему инструмент, который позволил бы ему использовать это где угодно, делать что угодно, а не только chmod.
4. оба, похоже, работают очень хорошо. я думаю, что вариант find является более подходящим, но второй вариант $() исправил что-то еще, что я хотел. так что спасибо, ребята
5. И я хочу сказать, что использование вывода
ls
в качестве аргументов другой команды является хрупким по причинам, указанным в предыдущем комментарии. Смотрите mywiki. wooledge.org/ParsingLs