Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Linux (Ubuntu, Debian, Red Hat, CentOS, Mint)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2013, 12:35   #1
Gadjett
 
Регистрация: 10.11.2011
Сообщений: 6
По умолчанию Bash скрипт восстановления файла untrash

Привет всем!
Во время выполнения лабораторной работы возникла проблема с тонкостями написания скриптов

По заданию нужно сделать вот что
  • Скрипту передается один параметр – имя файла, который нужно восстановить (без полного пути –
    только имя).
  • Скрипт по файлу trash.log должен найти все записи, содержащие в качестве имени файла
    переданный параметр, и выводить по одному на экран полные имена таких файлов с запросом
    подтверждения.
  • Если пользователь отвечает на подтверждение положительно, то предпринимается попытка
    восстановить файл по указанному полному пути (создать в соответствующем каталоге жесткую
    ссылку на файл из trash и удалить соответствующий файл из trash). Если каталога, указанного
    в полном пути к файлу, уже не существует, то файл восстанавливается в домашний каталог
    пользователя с выводом соответствующего сообщения.
Собственно задание выполняется, но если удалить сначала несколько файлов, а затем попытаться восстановить один из них, то тогда получается то, что называется ошибкой. Скрипт проходит по всем удаленным файлам, и просит их восстановить, но должен просить о восстановлении только одного файла.
Исходный код скрипта прилагаю
#!/bin/bash
for i in $(grep -h $1 $HOME/trash.log)
do
glPath=$(echo $i | awk -F ":" '{print $1}')
trFile=$(echo $i | awk -F ":" '{print $2}')
rmFile=$HOME/.trash/$trFile
#echo "glPath -> $glPath"
#echo "trFile -> $trFile"
#echo "rmFile -> $rmFile"

if [ $# -ne 1 ]; then
echo "usage: `basename $0` file" 1>&2
exit 1
fi

if [ -e $rmFile ];
then
echo "Do you want to restore file - $glPath ?"
read answer
if [[ $answer == "yes" ]]
then
#echo 'Пользователь хочет восстановить файл'
if [ -d $(dirname $glPath) ]
then
#echo 'Директория жива'
if [[ -e $glPath ]]
then
echo "Duplicate! Rename your file"
read newName
ln "$rmFile" "$(dirname $glPath)/$newName"
else
#echo 'Такого файла нет'
ln $rmFile $glPath
fi
else
echo "$(dirname $glPath) has been removed!"
ln $rmFile $HOME/$1
fi
rm $rmFile
#cat $HOME/trash.log | sed -i "/$trFile/d" $HOME/trash.log
grep -v $trFile $HOME/trash.log > $HOME/trash0.log
mv $HOME/trash0.log $HOME/trash.log
fi
fi
done
Gadjett вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
bash-скрипт FLEXO_187 Помощь студентам 0 24.01.2013 21:58
bash скрипт monster-bonster Операционные системы общие вопросы 2 24.09.2012 13:54
bash скрипт процессы в фоновом режиме Zerofill Операционные системы общие вопросы 0 04.04.2012 16:51
скрипт на bash, выполняющий поиск файлов в заданной директории до указанной даты! belochka21 Помощь студентам 0 26.09.2011 23:37
bash скрипт Rыся Фриланс 3 19.01.2011 13:58