установить права на чтение и запись в папку и все ее родительские каталоги

Мне нужно установить права на чтение и запись для root пользователя в subfolderN каталога subfolderN и все ее родительские папки до root .

Я могу сделать это руками:

  • Как добавить sftp-разрешение пользователю / клиенту?
  • Как ограничить пользователя одной папкой и не разрешать им перемещать свою папку
  • Как Unix реализует разрешения на файлы?
  • Как определить, какой процесс приводит к тому, что файл потеряет свои разрешения?
  • Есть ли способ увидеть разрешения всех промежуточных каталогов пути.?
  • Путаница в команде cp при создании нового каталога
  •  $ sudo chmod +rx /root/subfolder1/subfolder2/subfolderN $ sudo chmod +rx /root/subfolder1/subfolder2 $ sudo chmod +rx /root/subfolder1 $ sudo chmod +rx /root 

    Но если N большой, я устал. Как сделать это автоматически с помощью одной команды?

  • Массовое удаление большого каталога на ZFS без его рекурсивного перемещения
  • не может выполнить команду, даже я в группе, а команда -rwx - x ---
  • В Linux разрешение «Write» эквивалентно «Выполнению» для каталогов?
  • tar сжимает папку, но создает вложенную структуру
  • Скопировать права доступа к файлам от пользователя к группе
  • Почему `cp -a. / dir` копировать содержимое вместо каталога?
  • 4 Solutions collect form web for “установить права на чтение и запись в папку и все ее родительские каталоги”

    Это можно легко сделать в оболочке, начиная с поддира и двигаясь вверх:

     f=/root/subfolder1/subfolder2/subfolderN while [[ $f != "/" ]]; do chmod +rx $f; f=$(dirname $f); done; 

    Это начинается с любого файла / каталога, который вы устанавливаете f тоже, и работает в каждом родительском каталоге, пока не встретит «/» (или что бы вы ни установили строку в условии цикла). Это не chmod "/".

    С csh , tcsh , ksh , zsh , bash или fish :

     sudo chmod +rx /root{,/subfolder1{,/subfolder2{,/subfolderN}}} 

    С zsh :

     f=/root/subfolder1/subfolder2/subfolderN until [[ $f = / ]] {chmod +rx $f; f=$f:h;} 

    Я не знаю, что вы пытаетесь сделать, но лучше, чем вы не принимаете рекурсивную ситуацию . Тем не менее, прочитайте фактический ответ:

    Умм … почему бы просто не использовать рекурсивный.

     sudo chmod -R +rx /root 

    Или, если вам это не нравится, вы можете дать chmod несколько каталогов:

     sudo chamod +rx /root /root/subfolder1 /root/subfolder1/subfolder2 /root/subfolder1/subfolder2/subfolderN 

    Ну, вы могли бы сделать что-то более сложное, как:

     echo "/root/subfolder1/subfolder2/subfolderN" | perl -anF'/' -e 'while($#F>0){@b=join("/",@F);`chmod +rx @b`; pop @F}' 

    Чтобы увидеть, что это будет делать, замените вызов chmod на печать:

     $ echo "/root/subfolder1/subfolder2/subfolderN" | perl -alnF'/' -e 'while($#F>0){@b=join("/",@F);print "chmod +rx @b"; pop @F}' chmod +rx /root/subfolder1/subfolder2/subfolderN chmod +rx /root/subfolder1/subfolder2 chmod +rx /root/subfolder1 chmod +rx /root 
    Linux и Unix - лучшая ОС в мире.