#!/bin/bash # shellcheck disable=SC1090 # # Library for file system actions # Load Generic Libraries . "${BITNAMI_SCRIPTS_DIR:-}"/liblog.sh # Functions ######################## # Ensure a file/directory is owned (user and group) but the given user # Arguments: # $1 - filepath # $2 - owner # Returns: # None ######################### owned_by() { local path="${1:?path is missing}" local owner="${2:?owner is missing}" chown "$owner":"$owner" "$path" } ######################## # Ensure a directory exists and, optionally, is owned by the given user # Arguments: # $1 - directory # $2 - owner # Returns: # None ######################### ensure_dir_exists() { local dir="${1:?directory is missing}" local owner="${2:-}" mkdir -p "${dir}" if [[ -n $owner ]]; then owned_by "$dir" "$owner" fi } ######################## # Checks whether a directory is empty or not # Arguments: # $1 - directory # Returns: # Boolean ######################### is_dir_empty() { local dir="${1:?missing directory}" if [[ ! -e "$dir" ]] || [[ -z "$(ls -A "$dir")" ]]; then true else false fi } ######################## # Configure permisions and ownership recursively # Globals: # None # Arguments: # $1 - paths (as a string). # Flags: # -f|--file-mode - mode for directories. # -d|--dir-mode - mode for files. # -u|--user - user # -g|--group - group # Returns: # None ######################### configure_permissions_ownership() { local -r paths="${1:?paths is missing}" local dir_mode="" local file_mode="" local user="" local group="" # Validate arguments shift 1 while [ "$#" -gt 0 ]; do case "$1" in -f|--file-mode) shift file_mode="${1:?missing mode for files}" ;; -d|--dir-mode) shift dir_mode="${1:?missing mode for directories}" ;; -u|--user) shift user="${1:?missing user}" ;; -g|--group) shift group="${1:?missing group}" ;; *) echo "Invalid command line flag $1" >&2 return 1 ;; esac shift done read -r -a filepaths <<< "$paths" for p in "${filepaths[@]}"; do if [[ -e "$p" ]]; then if [[ -n $dir_mode ]]; then find -L "$p" -type d -exec chmod "$dir_mode" {} \; fi if [[ -n $file_mode ]]; then find -L "$p" -type f -exec chmod "$file_mode" {} \; fi if [[ -n $user ]] && [[ -n $group ]]; then chown -LR "$user":"$group" "$p" elif [[ -n $user ]] && [[ -z $group ]]; then chown -LR "$user" "$p" elif [[ -z $user ]] && [[ -n $group ]]; then chgrp -LR "$group" "$p" fi else stderr_print "$p does not exist" fi done }