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

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

  • Распакуйте все файлы в директории с тем же именем
  • Только подкаталоги rsync и контент
  • Как разбить файл, используя границы ключевых слов
  • В чем разница между этими двумя наборами команд для настройки разрешений ACL?
  • Как скрипт оболочки может выполнять действия, если время создания файла прошло 5 минут?
  • Почему другой пользователь не может получить доступ к моему файлу, когда это полный путь?
  • Как перемещать каталоги на основе вывода крупицы (проверка CRC32 .sfv) с помощью bash / perl?
  • Удаление дубликатов файлов, но игнорирование определенных строк (например, встроенная метка времени)
  • 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).

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