Скрипт: Restore permissions
Призначення: Відновлення прав доступу до файлів та директорій
Скажу декілька слів. Досить давно у мене виникали такі ситуації, коли
треба було вернути старі права доступу до файлів та тек, але оскільки я
не міг запам’ятати дефолтні права доступу, приходилося все на листку записувати.
Так і виникла ідея зробити таку міні утилітку, для відновлення прав доступу.
Скрипт вміє робити таблиці з правами доступу до кожного файлу/теки, ви просто вказуєте
теку, та бажану назву таблиці, а все решту скрипт робить сам.
Ось власне і сам скрипт:
P.S: впишіть свої шляхи у змінних WorkDir та PathSaveTable
#!/bin/bash
# Restore permissions
# Відновлення прав доступу до файлів та директорій
# Hanter www.hanter.name
WorkDir="/home/hanti/rp/" #Тека у якій знаходяться налаштування та тимчасові файли програми.
PathSaveTable="/home/hanti/" #Тека у яку будуть зберігатися таблиці з списками файлів/тек з правами доступу
Start()
{
if [ ! -d "$WorkDir" ]
then
mkdir "$WorkDir"
fi
clear
select Action in "Переглянути існуючі таблиці" "Створити нову таблицю" "Відновити із таблиці" "Завершити роботу"
do
break
done
case "$Action" in
"Переглянути існуючі таблиці")
echo -e "Наявні таблиці: \n"
if [ -z $(ListTable) ]
then
echo "На даний час таблиці відсутні."
sleep 1 ; clear
Start
else
ListTable
fi
;;
"Створити нову таблицю")
echo -e "Створення нової таблиці... \n Введіть шлях до теки:"
read PathTo
echo "Введіть назву таблиці:"
read TableName
GenerateTable "$PathTo" "$TableName"
;;
"Відновити із таблиці")
echo -e "Відновлення із таблиці... \n Введіть назву таблиці, без розширення:"
read TableName
echo "Введіть шлях до теки у якій потрібно відновити права доступу:"
read PathTo
Restore "$PathTo" "$TableName"
;;
"Завершити роботу")
echo "Виходимо..."
sleep 1 ; clear
exit 0
;;
*)
echo "Невідома дія"
sleep 1 ; clear
Start
esac
}
ListTable()
{
cd "$PathSaveTable"
ls *.rcmt
}
ConvertPermissions()
{
Permissions=$1
Number=0
for i in `seq 0 2`
do
case ${Permissions:$i:1} in
"r")
Number=`expr $Number + 4`
;;
"w")
Number=`expr $Number + 2`
;;
"x")
Number=`expr $Number + 1`
;;
*)
Number=`expr $Number + 0`
esac
done
echo -n "$Number"
}
GenerateTable()
{
PathTo=$1
TableName=$2
if [ ! -d "$PathTo" ]
then
echo "Шлях який Ви ввели є недійсним..."
sleep 1 ; clear
Start
fi
cd "$PathTo"
du -a > $WorkDir"ListFileF.txt"
cat /dev/null > $WorkDir"ListFileS.txt"
index=0
while read line
do
for i in `seq 0 ${#line}`
do
if [ "${line:$i:2}" = "./" ]
then
echo ${line:`expr $i + 2`:${#line}} >> $WorkDir"ListFileS.txt"
fi
done
index=`expr $index + 1`
done < $WorkDir"ListFileF.txt"
rm -f $WorkDir"ListFileF.txt"
cat /dev/null > "$PathSaveTable""$TableName.rcmt"
index=0
while read line
do
StringDataFile=$(ls -ld "$line")
StringDataFile=${StringDataFile:1:9}
rwx=()
for i in `seq 0 2`
do
tmp=${StringDataFile:`expr 3 \* $i`:3}
rwx[$i]=$(ConvertPermissions "$tmp")
done
echo "${rwx[0]}${rwx[1]}${rwx[2]}$line" >> "$PathSaveTable""$TableName.rcmt"
index=`expr $index + 1`
done < $WorkDir"ListFileS.txt"
rm -f $WorkDir"ListFileS.txt"
}
Restore()
{
PathTo=$1
TableName=$2
cd "$PathTo"
if [ ! -f "$PathSaveTable""$TableName.rcmt" ]
then
echo "Неможливо завантажити таблицю з іменем $TableName ..."
sleep 1 ; clear
Start
fi
while read line
do
strlen=${#line}
echo -n "chmod ${line:0:3} "
echo ${line:3:`expr $strlen - 3`}
chmod ${line:0:3} "$PathTo${line:3:`expr $strlen - 3`}"
index=`expr $index + 1`
done < $PathSaveTable"$TableName.rcmt"
}
Start
Вподальшому планую розшири функціонал, виправити старі баги та додати нові.