Способы установить биты только на dirs, кроме использования find - PullRequest
2 голосов
/ 30 августа 2011

Часто я чувствую, что мне нужно сделать дерево каталогов исполняемым для кого-то, например:

find . -type d -exec chmod ug+x {} \;

Но мне не нравятся издержки поиска и запуска "нового" chmod для каждогоdir.

У вас есть альтернативы?Почему?

Ответы [ 2 ]

6 голосов
/ 30 августа 2011

У этого должно быть намного меньше накладных расходов:

find . -type d -exec chmod ug+x {} +

(Заменено \; на +.) Это делает то же самое, но вызывает chmod со многими каталогами одновременно, что устраняетнакладные расходы при вызове chmod несколько раз.

со страницы man:

-exec command {} +  

Этот вариант действия -exec запускает указанную команду для выбранных файлов, нокомандная строка строится путем добавления каждого выбранного имени файла в конце;общее количество вызовов команды будет намного меньше, чем количество совпавших файлов.Командная строка строится почти так же, как xargs создает свои командные строки.В команде допускается только один экземпляр {}.Команда выполняется в начальном каталоге.

Это очень похоже на это:

find . -type d -print0|xargs -0 chmod ug+x
2 голосов
/ 30 августа 2011

Это не совсем то, что вы хотите, но это быстро и просто и может быть достаточно близко:

chmod -R ug+X .

Параметр прав доступа с большой буквы X сообщает chmod о предоставлении доступа на выполнение, только если это имеет смысл - если элемент является каталогом или уже имеет хотя бы один доступ к выполнению (т. Е. Если он выглядит как исполняемый файл).

...