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