Можно сделать это визуально с комбинацией. К сожалению, это - инструмент GUI, но если Вы просто хотите сделать это однажды, и на относительно маленьком файле, это должно быть прекрасным:
Изображение ниже является выводом meld a b
:
Есть довольно простой ответ (хотя я не знаю, работает ли он на всех версиях * NIX); Просто делайте
chmod g=u *
I.E., Установите G разрешения RUP, равные разрешениям U .
Это задокументировано в Chmod (1) :
Формат символического режима [[
UgOA
...] [[[[+ - =
] [ Перми ...] ...], где Перми - это либо ноль или более букв из множестваRWXXST
, или одна буква из множестваUGO
. ...︙
буквы
RWXXST
Выберите .... Вместо одного или нескольких из этих букв вы можете указать ровно одну из буквUGO
: Разрешения, предоставленные пользователю, которые принадлежат файлу (U
), Разрешения, предоставленные другим пользователям которые являются членами группы файлов (G
), а также разрешения, предоставленные Пользователям, которые находятся в ни одной из двух предыдущих категорий (o
).
О (недавнее для SED
-Z
) Система GNU, вы можете сделать что-то вроде:
find . ! -type l -printf '%m:%p\0' |
sed -Ez '/^.?(.)\1.:/d;s/(.)(.)(.):/\1\1\2\x0/' |
xargs -r0n2 echo chmod
(удалить ECHO
при выполнении результат).
Обратите внимание, что он обращается только к R
, W
, x
бит не специальных.
Если вы не хотите, чтобы это рекурсивно:
find . -mindepth 1 -maxdepth 1 ! -type l -printf '%m:%p\0' |
sed -Ez '/^.?(.)\1.:/d;s/(.)(.)(.):/\1\1\2\x0/' |
xargs -r0n2 echo chmod
Попробуйте:
for file in $(find .); do
perm=$(stat -c "%a" ${file});
echo chmod ${perm:0:1}${perm:0:1}${perm:2:1} ${file};
done
Не забудьте удалить ECHO
.
Улучшена версия:
find . -exec sh -c 'for file do
perm=$(stat -Lc "%a" "$file")
echo chmod "${perm:0:1}${perm:0:1}${perm:2:1}" "$file"
done' sh {} +
Как в Ответ Стефана Чазелас ,
- Mindepth 1
Во избежание обработки .
. -максеп 1
, чтобы избежать рекурсиона (ввод подкаталогов). ! -тип л
, чтобы избежать обработки символических ссылок
(Хотя этот ответ будет обрабатывать символические ссылки в порядке). Обратите внимание, что эта команда не будет работать правильно для файлов которые имеют любой из битов режима высокого порядка (SETUID, SETGID и TYCHY).