Изменение разрешения папки только не файлы в Linux

#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