Shell скрипт для бэкапа файлов

Для своих сайтов написал скрипт, который выполняет резервирование всех файлов.

Скрипт просматривает директорию и сжимает все папки с сайтами. Эти файлы помещает в домашнюю директорию пользователя. Копии этих файлов скрипт передает через фтп на другой компьютер.

Код скрипта:


#!/usr/local/bin/bash
PREFIX=`date +'%Y-%m-%d-%H%M'`
FOLDER=/usr/home/Ad1ce/sites-${PREFIX}

mkdir ${FOLDER}

for i in $(ls /usr/local/www/apache22/data/);do
echo "backuping ${i}
"tar -cjf ${FOLDER}/${i}.tar.bz2 /usr/local/www/apache22/data/${i}/*

done

for i in $(ls $FOLDER);do
echo «copying ${i}»

ftp -i -n -v 192.168.0.10 << EOF
  user USER PASS
  cd /backup/
  mkdir sites-${PREFIX}
  cd sites-${PREFIX}
  put ${FOLDER}/${i} ${i}
EOF

done

Примечание. Я не смог сделать следующую вещь. По идее авторизация на фтп сервере должна проходить один раз, а передачу файлов реализовать через цикл. Как это сделать средствами шелл я не в курсе.

Примечание 2. SyntaxHighlighter для подсветки кода к сожалению не работает. Почему то не подгружается ява скрипт.

Популярность: 14%



Также почитайте эти записи:

4 комментария

Angel2S2мая 18, 2009 at 20:37

Дело в том, что на каждой итерации у тебя создается новое подключение к фтп. «ftp -i -n -v 192.168.0.10» — это ведь выполняется каждую итерацию, а значит каждый раз новое подключение :)

Попробуй expect (я про него у себя в блоге рассказывал — angel2s2.blogspot.com/200... -ftp-expect.html), например так (вместо цикла «for i in $(ls $FOLDER);do»):

spawn ftp 192.168.0.10

expect «username:» {send «LOGIN\r»}

expect «password:» {send «PASSWD\r»}

expect «ftp>» {send «bin\r»} # бинарный режим

expect «ftp>» {send «cd /backup/\r»}

expect «ftp>» {send «mkdir sites-${PREFIX}\r»}

expect «ftp>» {send «cd sites-${PREFIX}\r»}

for i in $(ls $FOLDER); do

expect «ftp>» {send «put ${FOLDER}/${i} ${i}\r»}

done

send «bye\r»

expect eof

На счет твоих циклов (не совсем верно делаешь) да и в общем про ошибки программирования в баше рекомендую прочитать цикл статей — docs.google.com/Doc?id=dd5dc8n6_81dt8c5jfg (я их воедино собрал, линк на первоисточники вконце дока).

Ad1ceмая 20, 2009 at 1:23

Спасибо, попробую этот способ. Просто раньше я не знал как внедрить цикл при передаче множества файлов по фтп.

Angel2S2мая 21, 2009 at 16:53

Не за что :)

seagullиюня 14, 2009 at 1:42

есть еще полезная опция у архиватора tar -T

tar -cvf 123.tar -T list.txt

,где в файле list.txt список всех путей к папкам/файлам которые будут добавлены в архив 123.tar

Leave a comment

Your comment

Защитный код Укажите защитный код!