1. Owned by a common group , say "team".
2. Permissions - 770 or thereabouts.
I have faced this requirement many times, and many others have asked questions about this. So I decided to create a script for this.
The following script fixes the owner of all files in the given directory to root. Group owner is forced to be "team", and file permissions to be 770. It uses inotify to fix a file as soon as it is created, or its permissions are modified. You need to install inotify-tools package of your distribution. Tested with Fedora 9 linux, and eeebuntu on a eeepc.
If you save this as filepermd.sh, you have to call it as
sudo nice filepermd.sh /path/to/shared/directory/ team
#!/bin/bash
#remove trailing slash
dirRoot=`echo $1 | sed 's/\(.*\)\/$/\1/'`
echo $dirRoot
groupname=$2
chown root:$groupname "$dirRoot"
inotifywait -c -e ATTRIB -e CREATE -r -m "$dirRoot" | while read line
do
dirname=`echo $line | awk -F"," '{print $1}'`
filename=`echo $line | awk -F"," '{print $NF}'`
filepath="${dirname}${filename}"
perm=`ls -ld "$filepath" | awk '{print $1}' | sed 's/.\(.*\)/\1/'`
#remove first letter from permissions string. This is d for a
#directory, and - for a file. Not useful for us.
owner=`stat -c '%U' "$filepath"`
groupowner=`stat -c '%G' "$filepath"`
if [ "rwxrwx---" != "$perm" ]; then
chmod 770 "$filepath"
fi
if [ "root" != "$owner" ]; then
chown root "$filepath"
fi
if [ "$groupname" != "$groupowner" ]; then
chgrp "$groupname" "$filepath"
fi
done
Known Limitations: Following characters in filename, or directory path not supported. Such files will be silently ignored.
- Comma (,)
- BackSlash (\)
- Double-quote (")
- Single-quote (')
This is somewhat crude currently, but it will be modified as I get more feedback.
1 comment:
Great script! Works well on initial use for me. Appreciate your work.
Ubuntu 8.04
Post a Comment