#!/usr/bin/env bash # # Usage: perms_default_umask [] # # Fix permissions for a directory: # - align with umask 022 (755 on folders, 644 on files) # - keep +x flag for already executable files if enabled (default) check_required() { type find &> /dev/null || { echo "Requiring 'find' but it's not installed"; exit 1; } type chmod &> /dev/null || { echo "Requiring 'chmod' but it's not installed"; exit 1; } } check_required DIR="$1" KEEP_EXECUTABLE_FILES="$2" if [[ -z "$DIR" ]]; then echo "No directory given" exit 1; fi if [[ ! -d "$DIR" ]]; then echo "Directory $DIR does not exist" exit 1; fi if [[ -z "$KEEP_EXECUTABLE_FILES" ]]; then KEEP_EXECUTABLE_FILES="yes" fi echo "Fixing directory permissions of '$DIR'" find "$DIR" -type d -exec chmod 755 {} \; if [[ $KEEP_EXECUTABLE_FILES == 'yes' ]]; then echo "Maintaining +x flag for files in '$DIR'" EXECUTABLE_FILES=$(find "$DIR" -executable -type f) else echo "Executable files in '$DIR' will also be reset" fi echo "Fixing file permissions of '$DIR'" find "$DIR" -type f -exec chmod 644 {} \; if [[ $KEEP_EXECUTABLE_FILES == 'yes' ]]; then for i in ${EXECUTABLE_FILES}; do echo "Restoring +x flag for ${i}" chmod +x "${i}" done fi echo "Finished"