94 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/bash
 | 
						|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 | 
						|
 | 
						|
. "${SCRIPT_DIR}/settings.sh" || {
 | 
						|
  echo "no settings" && exit 1
 | 
						|
}
 | 
						|
 | 
						|
WP_CONTENT_DIRS=(
 | 
						|
  plugins
 | 
						|
  languages
 | 
						|
  upgrade
 | 
						|
  uploads
 | 
						|
  themes
 | 
						|
)
 | 
						|
 | 
						|
export WEB_GID=33
 | 
						|
export DIRS_MODE=775
 | 
						|
export FILES_MODE=664
 | 
						|
 | 
						|
echo -n "Check sudo permissions... "
 | 
						|
 | 
						|
sudo whoami
 | 
						|
 | 
						|
perms() {
 | 
						|
  TARGET=$1
 | 
						|
 | 
						|
  chmodFromFile() {
 | 
						|
    MODE=$1
 | 
						|
    FILE_LIST_FILE=$2
 | 
						|
 | 
						|
    # shellcheck disable=SC2046
 | 
						|
    # shellcheck disable=SC2006
 | 
						|
    chmod "$MODE" `cat "$FILE_LIST_FILE"`
 | 
						|
  }
 | 
						|
 | 
						|
  export -f chmodFromFile
 | 
						|
 | 
						|
  echo -n "Set correct ownerships for $(basename ${TARGET})... "
 | 
						|
  sudo chown -R $UID:$WEB_GID "${TARGET}"
 | 
						|
 | 
						|
  if [[ -d "${TARGET}" ]]; then
 | 
						|
#    echo -n "and fixing permissions for these directory... "
 | 
						|
#    echo "Fetching dirs without spaces"
 | 
						|
    find "${TARGET}" -type d -not \( -path *${THEME}/dist* -o -path */node_modules* \) | grep -v ' ' > $TMP_DIR/dirs-without-spaces
 | 
						|
 | 
						|
#    echo "Splitting dirs by 10000 lines"
 | 
						|
    split -l 10000 $TMP_DIR/dirs-without-spaces $TMP_DIR/dirs-without-spaces-part-
 | 
						|
 | 
						|
#    echo "Fetching files without spaces"
 | 
						|
    find "${TARGET}" -type f -not \( -path *${THEME}/dist* -o -path */node_modules* \) | grep -v ' ' > $TMP_DIR/files-without-spaces
 | 
						|
 | 
						|
#    echo "Splitting files at 10000 lines"
 | 
						|
    split -l 10000 $TMP_DIR/files-without-spaces $TMP_DIR/files-without-spaces-part-
 | 
						|
 | 
						|
#    echo "Fetching dirs with spaces"
 | 
						|
    find "${TARGET}" -type d -not \( -path *${THEME}/dist* -o -path */node_modules* \) | grep ' ' > $TMP_DIR/dirs-with-spaces
 | 
						|
 | 
						|
#    echo "Fetching files with spaces"
 | 
						|
    find "${TARGET}" -type f -not \( -path *${THEME}/dist* -o -path */node_modules* \) | grep ' ' > $TMP_DIR/files-with-spaces
 | 
						|
 | 
						|
#    echo "Fixing permissions for dirs"
 | 
						|
    # shellcheck disable=SC2038
 | 
						|
    # shellcheck disable=SC2016
 | 
						|
    find $TMP_DIR/ -maxdepth 1 -type f -name "dirs-without-spaces-part-*" | xargs -I {} bash -c 'chmodFromFile $DIRS_MODE {}'
 | 
						|
 | 
						|
#    echo "Fixing permissions for files"
 | 
						|
    # shellcheck disable=SC2038
 | 
						|
    # shellcheck disable=SC2016
 | 
						|
    find $TMP_DIR/ -maxdepth 1 -type f -name "files-without-spaces-part-*" | xargs -I {} bash -c 'chmodFromFile $FILES_MODE {}'
 | 
						|
 | 
						|
#    echo "Fixing permissions for dirs with spaces"
 | 
						|
    cat $TMP_DIR/dirs-with-spaces | xargs -I {} chmod $DIRS_MODE "{}"
 | 
						|
 | 
						|
#    echo "Fixing permissions for files with spaces"
 | 
						|
    cat $TMP_DIR/files-with-spaces | xargs -I {} chmod $FILES_MODE "{}"
 | 
						|
 | 
						|
#    echo "Removing temporary files"
 | 
						|
    rm $TMP_DIR/files-*
 | 
						|
    rm $TMP_DIR/dirs-*
 | 
						|
    echo "ok"
 | 
						|
  else
 | 
						|
    echo -n "and fixing permission for this file... "
 | 
						|
#    echo "Fixing permissions"
 | 
						|
    chmod $FILES_MODE "${TARGET}"
 | 
						|
    echo "ok"
 | 
						|
  fi
 | 
						|
}
 | 
						|
 | 
						|
for DIR in "${WP_CONTENT_DIRS[@]}"; do
 | 
						|
  perms "$SCRIPT_DIR/../wp-content/$DIR"
 | 
						|
done
 | 
						|
 | 
						|
#perms "$SCRIPT_DIR/../wp-content/index.php"
 |