How can I let my fellow project team members read or write my files
See also
If you move or copy a file or directory from one project directory to another, or from somewhere within your home directory to somewhere within a project directory, generally the file, or the directory together with its contents, as the case may be, will keep its original ownership, group and permissions.
So, supposing Joe Bloggs moves a file from his home directory to the
project directory /nesi/project/nesi12345, his fellow team members
won't be able to write to it:
$ ls -l README
-rw-r--r-- 1 bloggsj bloggsj 235 Mar 14 2014 README
$ mv README /nesi/project/nesi12345/bloggsj/README
$ ls -l /nesi/project/nesi12345/bloggsj/README
-rw-r--r-- 1 bloggsj bloggsj 235 Mar 14 2014 /nesi/project/nesi12345/bloggsj/README
As you can see, the file stays in the group bloggsj, that is Joe
Bloggs' personal group, even though it is now inside the project
directory.
There is, however, a solution involving the rsync command, a more
advanced version of scp. rsync is typically used to copy files
between two or more machines, but can also be used within the same
machine.
Warning
In both these commands, the --no-perms and --no-group options must
both come after -a. -a implicitly asserts --perms and --group,
and will therefore override whichever
of --no-perms and --no-group come before it.
To copy a file (or directory and its contents), updating its group and setting its permissions¶
rsync -a --no-perms --no-group --chmod=ugo=rwX,Dg+s /path/to/source /path/to/destination
To move a file (or directory and its contents), updating its group and setting its permissions¶
Warning
The --remove-source-files option is safe only if every source file
is otherwise left intact during the moving process.
rsync --remove-source-files -a --no-perms --no-group --chmod=ugo=rwX,Dg+s /path/to/source /path/to/destination
If you want to set files to executable in all cases,
replace ...ugo=rwX... with ...ugo=rwx.... The capital X means,
"Preserve whatever executable permissions existed on the source file and
aren't masked at the destination." A lower case x on the other hand
means, "Make this entity executable, even if it wasn't so previously,
though this may be masked at the destination."
To fix the permissions of a file or directory that is already in its intended place¶
Change to the parent directory, which could be a project or nobackup directory, that you want to fix, and find and fix your files. You can do this by means of the following commands.
# Replace nesi12345 with your desired project code
group=nesi12345
startdir=$(pwd)
# Replace /nesi/project with /nesi/nobackup if needed
cd /nesi/project/${group}
# Move all files, directories, etc. owned by yourself into the project group
# The --no-dereference option updates the group of symbolic links (where permitted)
find . -user $(whoami) -print0 | xargs -0 -I {} chgrp --no-dereference ${group} {}
# Make all files owned by yourself readable and writable by the group
find . -user $(whoami) -and -type f -print0 | xargs -0 -I {} chmod g+rw {}
# Make all directories owned by yourself readable, writable and executable by the group,
# and set the setgid bit
find . -user $(whoami) -and -type d -print0 | xargs -0 -I {} chmod g+rwxs {}
# Go back to the starting location
cd ${startdir}