Задавать групповые разрешения как разрешения владельца

Мне нужно установить те же права владельца, чтобы они рекурсивно группировали все элементы в каталоге.

  • `sudo cp -a` изменяет право собственности на root (вместо сохранения исходного пользователя)
  • Что такое консультативная блокировка файлов, которые обычно используют системы Unix?
  • Объединение файлов в них также добавляет новую строку между каждым файлом
  • как удалить все файлы с определенным расширением в определенных именованных папках в большом дереве?
  • Есть ли способ сказать системе сохранить папку в памяти?
  • Повторная настройка perms на RPM не работает
  • rm -fr не работает
  • слияние файлов txt с похожим именем
  • 3 Solutions collect form web for “Задавать групповые разрешения как разрешения владельца”

    Существует довольно простой ответ (хотя я точно не знаю, работает ли он во всех версиях * nix); просто делай

     chmod g=u * 

    т.е. установите разрешения g roup равными разрешениям u ser.

    Это описано в chmod (1) :

    Формат символического режима – [ ugoa …] [[ +-= ] [ perms …] …], где perms – либо ноль, либо больше букв из набора rwxXst или одна буква из набора ugo . …

    Буквы rwxXst выбирают …. Вместо одного или нескольких из этих букв вы можете точно указать одну из букв ugo : разрешения, предоставленные пользователю, которому принадлежит файл ( u ), разрешения, предоставленные другим пользователям, которые являются членами группы файлов ( g ), и разрешения, предоставленные пользователям, которые не входят ни в одну из двух предыдущих категорий ( o ).

    В системе GNU (недавно для sed -s -z ) вы можете сделать что-то вроде:

     find . ! -type l -printf '%m:%p\0' | sed -Ez '/^.?(.)\1.:/d;s/(.)(.)(.):/\1\1\2\x0/' | xargs -r0n2 echo chmod 

    (удалите echo если вы удовлетворены результатом).

    Обратите внимание, что он обращается только к r , w , x bits, а не к специальным.

    Если вы не хотите, чтобы он был рекурсивным:

     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 чтобы избежать обработки . ,
    • Используйте -maxdepth 1 чтобы избежать рекурсии (введите подкаталоги).
    • Используйте ! -type l ! -type l чтобы избежать обработки символических ссылок (хотя этот ответ будет обрабатывать символические ссылки в порядке).

    Обратите внимание, что эта команда не будет работать корректно для файлов, в которых установлены какие-либо биты режима высокого порядка (setuid, setgid и sticky).

    Linux и Unix - лучшая ОС в мире.