#!/bin/zsh SCRIPTNAME="~/chm.sh" ALIASNAME="chm" _help() { echo -n "chm: performs chmod recursively on specified folder with specified values for folder and files. Executable permissions will be set for all folders\n\n" echo "Usage: $SCRIPTNAME or: $ALIASNAME octalvalue : this is the FILE permissions to be set in the specified folder and its subfolders. Use the same octal value you would use as a chmod argument folder : this is the folder on which to execute the command Example: $SCRIPTNAME 664 ./testfolder ; this will set testfolder and its subfolders to 775 and files in those subfolders to 664 $SCRIPTNAME 764 ./testfolder ; this will set testfolder and its subfolders to 775 and files in those subfolders to 764 " } _process() { folder=$2 declare -i val=$1 declare -i rwmask=8#111 declare -i dirval=$val\|$rwmask filevalstr=$(printf "%03o" $val) dirvalstr=$(printf "%03o" $dirval) echo chmod -R $dirvalstr "'"$folder"'" find "$folder" -type d -exec chmod $dirvalstr {} \; echo chmod -R $filevalstr "'"$folder"'" find "$folder" -type f -exec chmod $filevalstr {} \; } main() { [[ -z "$1" ]] && _help && return if [[ $# -lt 2 ]]; then _help return fi declare -i modval=0 { # try let modval=8#$1 && _process $modval "$2" } || { # catch echo 'ERROR: Check if the first argument is a proper octal value!' echo 'If not, fix the value and try again.' } } main "$@"