Issue #2028 » fix-permissions.sh
| 1 |
file_list=$1 |
|---|---|
| 2 |
# This only works if each file that's found in the working directory's
|
| 3 |
# tree has a unique basename.
|
| 4 |
#
|
| 5 |
# The parsing is for output as found here:
|
| 6 |
# https://redmine.replicant.us/projects/replicant/wiki/GT-I9300EFSContent
|
| 7 |
# Some ls programs format the date differently.
|
| 8 |
#
|
| 9 |
# The directories mode bits, owner and group will not be changed.
|
| 10 |
(OLD_IFS="$IFS"; \ |
| 11 |
IFS=' |
| 12 |
'; \ |
| 13 |
for line in $(IFS=$OLD_IFS; \ |
| 14 |
cat $file_list \ |
| 15 |
| grep '^[-d]' \ |
| 16 |
| grep -v ' \.\.$' \ |
| 17 |
| grep -v ' \.$') ; \ |
| 18 |
do (IFS=$OLD_IFS; \ |
| 19 |
file_name=$(echo $line | cut -d ' ' -f 9); \ |
| 20 |
file=$(find . -name "$file_name"); \ |
| 21 |
owner=$(echo $line | cut -d ' ' -f 3); \ |
| 22 |
group=$(echo $line | cut -d ' ' -f 4); \ |
| 23 |
user_bits=$(echo $line | cut -c 2-4 | tr -d '-'); \ |
| 24 |
group_bits=$(echo $line | cut -c 5-7 | tr -d '-'); \ |
| 25 |
others_bits=$(echo $line | cut -c 8-10 | tr -d '-'); \ |
| 26 |
if [ -z "$file" ]; \ |
| 27 |
then echo "$file_name not found."; \ |
| 28 |
echo "The line was:"; \ |
| 29 |
echo "$line"; \ |
| 30 |
else \ |
| 31 |
chmod u=$user_bits,g=$group_bits,o=$others_bits $file; \ |
| 32 |
chown $owner $file; \ |
| 33 |
chgrp $group $file; \ |
| 34 |
fi; \ |
| 35 |
); \ |
| 36 |
done; \ |
| 37 |
IFS=$OLD_IFS) |