Этот сработал для меня
$ echo `grep -oe '^...\|[0-9]\{5\}' filename` | grep -oe '.\{9,10\}$\?' | grep ed
Ted 30000
Ned 25000
В каталоге верхнего уровня можно использовать подстановочные знаки.
chmod 774 d*/workspace
Или, чтобы сделать это более конкретным, вы также можете ограничить подстановочный знак, например, до d
, за которым следует одна цифра.
chmod 774 d[0-9]/workspace
Более общий подход может заключаться в find
.
find d* -maxdepth 1 -name workspace -type d -exec chmod 774 "{}" \;
В такой оболочке, как bash
, вы можете использовать расширенную опцию подстановки, чтобы сначала пометить все каталоги с именами workspace
и chmod
за один раз
shopt -s nullglob globstar
Опция nullglob
предназначена для того, чтобы убедиться, что расширение glob не выдает никаких ошибок, когда оно не не находит никаких файлов в пути. Также это гарантирует, что пустая строка glob не будет включена в массив. Опция globstar
включена для рекурсивной подстановки.
Теперь пометьте эти каталоги в массиве оболочки как
dirs=(**/workspace/)
В качестве еще одной проверки работоспособности вы можете сначала распечатать массив, чтобы убедиться, что все требуемые каталоги позаботились. Посмотрите, все ли каталоги перечислены ниже, когда вы выполните приведенную ниже команду printf()
,
printf '%s\n' "${dirs[@]}"
Это заполнит массив всеми рекурсивными workspace
папками, теперь нам нужно использовать chmod
для него
(( "${#dirs[@]}" )) && chmod -R 774 -- "${dirs[@]}"
Команда chmod
имеет удобный ярлык для установки исполняемого бита только в каталогах, например:
chmod a+X *
Это очень удобно для того, чтобы сделать целое дерево каталогов доступным для чтения всем, но не устанавливать исполняемый бит для каких-либо обычных файлов:
chmod -R a+rX *