создавать иерархию папок и устанавливать разрешения - PullRequest
0 голосов
/ 29 мая 2020

mkdir имеет параметры:

  • -p, который создает все родительские каталоги, если они отсутствуют
  • -m, который изменяет права пользователя.

Проблема для меня в том, что -m 755 применяется только к конечному каталогу.

mkdir -m 755 -p a/b/c -> c имеет режим 755, но a и a/b имеют режимы 700. (Я хочу a и a / b тоже должны быть 755)

Есть простое решение? (или просто перебирать родителей и chmod каждого?)

1 Ответ

1 голос
/ 29 мая 2020

Это немного неожиданное поведение mkdir, я бы также предположил, что флаг -m повлияет на все созданные каталоги, а не только на листовой узел.

Я вижу два простых способа сделать это:

  1. $ (umask 022; mkdir -p a/b/c)
  2. $ install -d -m 755 a/b/c

umask управляет всем созданием файлов, выполняемым оболочкой, и является маской установленных битов разрешения (это делает значения немного сложными в использовании). Заключение двух команд в круглые скобки означает, что они будут действовать только для этой подчиненной оболочки.

Другой вариант - использование инструмента установки. С параметром -d он ведет себя так же, как mkdir -p, но флаг -m будет использоваться для всех каталогов, а не только для конечного узла. install является частью пакета coreutils и, скорее всего, будет доступен в любой системе.

...