#!/bin/sh
#
# chmodr.sh
#
# author: Francis Byrne & The ITD
# date: 2013/09/25
#
# Generic Script for recursively setting permissions for directories and files
# to defined or default permissions using chmod.
#
# Takes a path to recurse through and options for specifying directory and/or
# file permissions.
# Outputs a list of affected directories and files.
#
# If no options are specified, it recursively resets all directory and file
# permissions to the default for most OSs (dirs: 755, files: 644).
# ITD: Added support for no directory parameter (uses current dir if none specified)
#
# Usage message
usage()
{
echo "Usage: $0 -d DIRPERMS -f FILEPERMS PATH"
echo "Arguments:"
echo "PATH: path to the root directory you wish to modify permissions for"
echo "Options:"
echo " -d DIRPERMS, directory permissions"
echo " -f FILEPERMS, file permissions"
exit 1
}
# Check if user entered arguments
if [ $# -lt 1 ] ; then
usage
fi
# Set the directory path
ROOT=$1;
if [ -d $ROOT ] ; then
shift
else
echo "Using current directory";
ROOT=".";
fi
# Get options
while getopts d:f: opt;
do
case "$opt" in
d) DIRPERMS="$OPTARG";
;;
f) FILEPERMS="$OPTARG";
;;
\?) usage
;;
esac
done
# Shift option index so that $1 now refers to the first argument
shift $(($OPTIND - 1))
# Default directory and file permissions, if not set on command line
if [ -z "$DIRPERMS" ] && [ -z "$FILEPERMS" ] ; then
DIRPERMS=755
FILEPERMS=644
fi
# Check if the root path is a valid directory
if [ ! -d $ROOT ] ; then
echo "$ROOT does not exist or isn't a directory!" ; exit 1
fi
# Recursively set directory/file permissions based on the permission variables
if [ -n "$DIRPERMS" ] ; then
find $ROOT -type d -print0 | xargs -0 chmod -v $DIRPERMS
fi
if [ -n "$FILEPERMS" ] ; then
find $ROOT -type f -print0 | xargs -0 chmod -v $FILEPERMS
fi
Comments