shell-scripts/chm.sh

49 lines
1.6 KiB
Bash

#!/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 <octalvalue> <folder>
or: $ALIASNAME <octalvalue> <folder>
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 "$@"