Is there a unix command to give the group the same permissions as the user currently has on a file-by-file basis recursively for a directory tree? I.e. if a file is user writeable it should become group writeable, otherwise it should not be group writeable and so on.
4 Answers
Kudos to jamessan for showing us g=u. On my system, this seems to work:
chmod -R g=u dir
- 2,288
I can't think of an easy way to do that with existing commands. Maybe a script like this would help :
#!/bin/bash
DIR="$1"
find "$DIR" -ls | while read a b perm c d e f g h i file; do
uperm=${perm:1:3}
uperm=$(echo "$uperm" | tr -d '-')
chmod g=$uperm "$file"
done
Also, keep in mind that some perms for users might not apply to groups, and vice versa.
- 3,831
I don't know if such a command exists but making use of find and invoking it a few times you can achieve
what you are trying to do, for example
For example:
% find . -type f -perm -u+w -and ! -perm -g+w -exec chmod g+w {} \;
The above command traverses the current directory ".", finds all the files that have write permission for
the user but no write permissions for the group and changes there permission to be group writable.
Similarly you use variant above invocation to change the file permissions for read and execute mode for the group.
- 136
sudo, it didn't work; I had to switch to the owning user first. – hoffmanc Sep 07 '21 at 13:52