mirror of
https://github.com/unraid/webgui.git
synced 2026-01-13 13:09:58 -06:00
51 lines
1.5 KiB
Bash
Executable File
51 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Usage: newperms [dir] [owner] [group]
|
|
# Recursively changes the ownership and permissions of the directory and all files/subdirs
|
|
# within the directory.
|
|
# If no arguments given, operates on /mnt/cache and /mnt/disk*, setting owner:group to nobody:users
|
|
# default owner is 'nobody', default group is 'users'
|
|
|
|
# This was created to fix ownership/permissions when upgrading to Unraid version 5.
|
|
|
|
# With corrections suggested by forum member Stokkes
|
|
|
|
# Here's a breakdown of chmod "u-x,go-rwx,go+u,ugo+X"
|
|
# u-x Clear the 'x' bit in the user permissions (leaves rw as-is)
|
|
# go-rwx Clear the 'rwx' bits in both the group and other permissions
|
|
# go+u Copy the user permissions to group and other
|
|
# ugo+X Set the 'x' bit for directories in user, group, and other
|
|
|
|
function process {
|
|
list="$1"
|
|
[[ $# -ge 2 ]] && owner=$2 || owner=nobody
|
|
[[ $# -ge 3 ]] && group=$3 || group=users
|
|
ifs=$IFS; IFS='|'
|
|
for dir in $list; do
|
|
echo "$dir"
|
|
if [[ -d $dir ]]; then
|
|
echo processing "$dir"
|
|
echo ... chmod -R u-x,go-rwx,go+u,ugo+X "$dir"
|
|
chmod -R u-x,go-rwx,go+u,ugo+X "$dir"
|
|
echo ... chown -R $owner:$group "$dir"
|
|
chown -R $owner:$group "$dir"
|
|
echo ... sync
|
|
sync
|
|
fi
|
|
done
|
|
IFS=$ifs
|
|
}
|
|
|
|
if [[ -n $1 ]]; then
|
|
process "$@"
|
|
else
|
|
process /mnt/cache
|
|
for disk in /mnt/disk[0-9]*; do
|
|
process $disk
|
|
done
|
|
fi
|
|
|
|
echo
|
|
secs=$SECONDS
|
|
printf "completed, elapsed time: %.2d:%.2d:%.2d\n" $(($secs/3600)) $(($secs%3600/60)) $(($secs%60))
|