#!/usr/bin/env bash base_dir=$1 group=$2 file_perm=${3:-664} dir_perm=${4:-2775} set_also_base_dir=${5:-false} if $set_also_base_dir ; then chmod $dir_perm $base_dir chgrp $group $base_dir fi while IFS='' read -r -d '' filename ; do [[ -f "$filename" ]] && ( chmod $file_perm "$filename"; chgrp $group "$filename") [[ ! -d "$filename" ]] && continue [[ "$filename" =~ .Trash ]] && continue [[ "$filename" = "lost+found" ]] && continue chmod $dir_perm "$filename" ; chgrp $group "$filename" find "$filename" ! -group $group -exec chgrp -R $group {} \; find "$filename" -type d ! -perm $dir_perm -exec chmod -R $dir_perm {} \; find "$filename" -type f ! -perm $file_perm -exec chmod -R $file_perm {} \; done < <(find $base_dir -mindepth 1 -maxdepth 1 -print0) exit 0