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

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

  • О путанице .file и ./directory
  • Как считать рекурсивно количество файлов в нескольких каталогах?
  • Как синхронизировать две папки с инструментами командной строки?
  • Создайте файл gzip с заданным размером
  • задайте файл, найдите, где в подкаталоге он был скопирован в
  • Симметричная разностная труба?
  • Иконки иконок для значков Linux
  • Повреждение имени файла
  • 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

    Как найти каждый файл, который содержит заданную функцию?

    Помощь в создании проектов Yocto (open embedded) с использованием кластерных вычислений в Linux

    Каким образом RHEL / centos отличается от Fedora пакетным / релевантным пользователю?

    Клонированные системы + сетевые интерфейсы

    Загрузите модуль из меню загрузки

    Ричард Столлман сравнивает Linux с Windows

    Исправить шрифты через ssh

    Как восстановить поврежденную базу данных Banshee?

    Как Debian использует множество процессорных ядер?

    установка диспетчера синаптических пакетов извне репозиториев

    Если ^ a ^ b заменяет «a» один раз в последней команде, что я использую для замены всех вхождений «a»?

    Ограничить пропускную способность с помощью DD-WRT

    Установка Nix или Guix без прав root?

    Как я могу заставить systemd использовать qingy в качестве моей программы tty по умолчанию вместо agetty (debian jessie)?

    Bash: Имея 2 файла, как я могу проверить, появляется ли второе имя в первом случае во втором

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