set read and write permissions to folder and all its parent directories

This can be done easily in the shell, starting in the subdir and moving upwards:

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

This starts with whatever file/directory you set f too, and works on every parent directory, until it encounters "/" (or whatever you set the string in the condition of the loop to). It does not chmod "/". Make sure both f and the directory in the condition of the loop are absolute paths.


With csh, tcsh, ksh, zsh, bash, fish or yash -o braceexpand:

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

With zsh:

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

Or you could define a glob qualifier function like:

explode() {
  reply=()
  until [[ $REPLY = [./] ]] {
    reply+=$REPLY
    REPLY=$REPLY:h
  }
}

To be used for instance as:

$ echo chmod +rx subfolder1/subfolder2/subfolderN(+explode)
chmod +rx subfolder1 subfolder1/subfolder2 subfolder1/subfolder2/subfolderN  

Note that chmod +rx is affected by the umask. If your umask doesn't include 007, it would make the /root directory world-readable and accessible which is a bad idea. /root is typically for the super-user's private things, it's a bad idea to expose it.


I don't know what you are trying to do, but is better than you don't take the recursive lightly. That said, read the actual answer:

Umm... why not just use recursive.

sudo chmod -R +rx /root

Or if you don't like it, you can give chmod several directories:

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