Deutsch
Germany.ruФорумы → Архив Досок→ Linux & Co

Backup

124  
Tolstyj местный житель13.09.04 23:00
Tolstyj
NEW 13.09.04 23:00 
Есть группа пользователей: user1, user2, user3 и т.д.
У каждого есть каталог /home/userNаme/doc
Нужно чтобы автоматически создавались архивы вида user_name-date.tar.gz
Я понимаю, что в скрипт нужно записать что-то типа
tar -czf $(Username)-$(date).tar.gz /home/$(Username)/doc/*
Как сделать так чтобы автоматически перебирались все пользователи, что имеют домашние каталоги в /home и как вычислить текущую дату?
Можно сделать ls /home > userlist, но как потом прочитать из файла все имена по очереди и выполнить для них указанные действия?
И вопрос сюда же, как можно автоматически убивать файлы старше чем, например, 2 недели?
Это чтобы не засорять старыми бекапами диск.

#1 
Russman знакомое лицо14.09.04 10:04
Russman
NEW 14.09.04 10:04 
в ответ Tolstyj 13.09.04 23:00
http://zope.cprogrammer.org/home/hydrа например.
Советую поискать на freshmeat.net по слову backup.
---
Хороший хирург поможет плохому танцору...
#2 
Al_Bundy прохожий14.09.04 10:56
NEW 14.09.04 10:56 
в ответ Tolstyj 13.09.04 23:00
не пробовал, но вроде так должно работать:
#!/bin/sh
CURRENT_DATE=`date "+%Y-%m-%d_%H:%M:%S"`
BACKUP=/my-backup
USERS="user1 user2 user3"
for user in $USERS
do
tar xfz ${BACKUP}/{user}-${CURRENT_DATE}.tgz /home/${user}/doc
done
>>И вопрос сюда же, как можно автоматически убивать файлы старше чем, например, 2 недели?
>>Это чтобы не засорять старыми бекапами диск.

#find /my-backup -type f -mtime +14 -exec /bin/rm {} \;
#3 
Tolstyj местный житель14.09.04 11:27
Tolstyj
NEW 14.09.04 11:27 
в ответ Al_Bundy 14.09.04 10:56
Спасибо.
А можно
USERS="user1 user2 user3"
заменить на
USERS='ls /home'
Будет ли работать?
Просто если добавлять пользователей руками, то точо когда-нибудь забуду дописать нового?
#4 
Al_Bundy прохожий14.09.04 13:44
NEW 14.09.04 13:44 
в ответ Tolstyj 14.09.04 11:27
да, можно:
USERS=`cd /home; ls`
#5 
Tolstyj местный житель14.09.04 21:33
Tolstyj
NEW 14.09.04 21:33 
в ответ Al_Bundy 14.09.04 13:44
Спасибо, заработало.
Вот еще вопрос возник нужно проверить переменную на сответствие списку.
Тоесть, есть ряд параметров, которые передаются скрипту и нужно проверить на допустимость их значения.
Я пытался организовать через так
if (test $1="op1" -o $1="op2" -o $1="op3" )
then
комманды
else
echo mistake
fi
Но что-то не пашет.
Как нужно это писать?
#6 
Al_Bundy прохожий15.09.04 09:58
NEW 15.09.04 09:58 
в ответ Tolstyj 14.09.04 21:33
а для кокого shell скрипт? например у cshell syntax немного другой
етот пример для bash/ksh/sh
#! /bin/sh
if [ $# -ne 1 ]
then
echo "wrong number of parameter"
echo "Usage: $0 opt1|opt2|opt3"
exit
fi
if [ "${1}" = "opt1" -o "${1}" = "opt2" ]
then
echo "do somthing"
else
echo "mistake"
fi
а для параметров можно и switch - case применять, поиши на /usr или /etc там полно скриптов ....
#7 
Tolstyj местный житель15.09.04 20:24
Tolstyj
15.09.04 20:24 
в ответ Al_Bundy 15.09.04 09:58
а для кокого shell скрипт?
Для bash.
Спасибо, я понял уже как писать. А то в книжке было написано какие параметры есть, а примера не было.
#8