что такое подстановочный знак для выбора всех каталогов в каталоге

13

я хочу установить липкий бит для всех каталогов в каталоге, кроме файлов. есть ли какие-нибудь символы для этого?

#sudo chmod g+s /var/www/<WILD_CARD_FOR_ALL_DIRECTORIES>
Necktwi
источник

Ответы:

24

Используйте */для сопоставления только каталогов.

chmod g+s /var/www/*/

Для соответствия всем каталогам и подкаталогам используйте **/*/(при условии, что вы globstarвключили в bash):

shopt -s globstar
chmod g+s /var/www/**/*/
кендырь
источник
2
Работает хорошо, но сломается, как только длина расширенной командной строки превысит ограничение длины командной строки. -> cyberciti.biz/faq/argument-list-too-long-error-solution
Бонси Скотт
1
да, я хорошо это знаю. Тем не менее, ОП попросил «подстановочный знак».
Dogbane
Да! я попросил подстановочный знак, спасибо.
Necktwi
я знаю, что он попросил подстановочный знак. Я только указал, что он потерпит неудачу при некоторых обстоятельствах. Кроме того, здесь нет критических замечаний (я прокомментировал, но проголосовал, потому что в большинстве случаев это рабочее решение) ^^
Бонси Скотт
13

Вы можете использовать найти, см. ниже пример

find /var/www/ -type d -exec chmod g+s {} \;
Рахул Патил
источник
3
Это хорошо, но не подстановочный знак - но у него есть преимущество в том, что он не терпит неудачу из-за большого количества каталогов
Бонси Скотт
Обратите внимание, что по умолчанию это рекурсивно. Если вы хотите, чтобы ваша команда применялась только к верхнему уровню, вы можете использовать -maxdepth findаргумент.
Крис Харпер
0

Это НЕ подстановочное, поэтому я извиняюсь за отсутствие ответа, однако ...
ls -al |grep ^d | awk '{print$NF}'будет список всех каталогов в текущем каталоге, это до вас , чтобы решить , если вы хотите , чтобы процесс .и ..или лишить их.

echo $(ls -al |grep ^d | awk '{print$NF}') делает это ведет себя как подстановочный знак

BSD
источник
Это сломается, если ваши файлы имеют начальные или конечные пробелы или переводы строк.
Крис Складывающаяся