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}
EOFdone
Примечание. Я не смог сделать следующую вещь. По идее авторизация на фтп сервере должна проходить один раз, а передачу файлов реализовать через цикл. Как это сделать средствами шелл я не в курсе.
Примечание 2. SyntaxHighlighter для подсветки кода к сожалению не работает. Почему то не подгружается ява скрипт.
Популярность: 14%
Дело в том, что на каждой итерации у тебя создается новое подключение к фтп. «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 (я их воедино собрал, линк на первоисточники вконце дока).
Спасибо, попробую этот способ. Просто раньше я не знал как внедрить цикл при передаче множества файлов по фтп.
Не за что
есть еще полезная опция у архиватора tar -T
tar -cvf 123.tar -T list.txt
,где в файле list.txt список всех путей к папкам/файлам которые будут добавлены в архив 123.tar