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 для подсветки кода к сожалению не работает. Почему то не подгружается ява скрипт.
Популярность: 11%
Также почитайте эти записи:
- Автоматизируем скачивание видео контента с сайта РБК (0)
- MySql и shell. Создание базы данных с точкой в имени (0)
- Обновил скрипт для проверки индексации (0)
5 комментариев
Оставить комментарий
Поиск по сайту
Облаго тегов
Партнеры
- Инновация! Конструктор сайтов: создание сайта. Создание сайта за 25000 рублей.
- Светильники от производителя: настольные лампы. Светильники из Италии.
- купить псп киев
Популярные статьи
- Программы для работы с веб- камерами
- Как узнать mac адрес сетевой карты удаленно
- Чтение ext4 разделов в Windows
- Как обжать кабель
- Основные сочетания клавиш Windows XP
- Доступ к виртуальной машине из интернета. Осваиваем port mapping в vmware
- MySQL: Optimize Table
- Ubuntu. Как узнать размер папок в директории?
- Скрипт для проверки индексации сайтов
- WinXp. Закрываем скрытые шары
Реклама
- Ищешь недорогой отель в Киеве - отели киева. Элитный отель в центре Киева?
Дело в том, что на каждой итерации у тебя создается новое подключение к фтп. «ftp -i -n -v 192.168.0.10» — это ведь выполняется каждую итерацию, а значит каждый раз новое подключение :)
Попробуй expect (я про него у себя в блоге рассказывал — ), например так (вместо цикла «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
На счет твоих циклов (не совсем верно делаешь) да и в общем про ошибки программирования в баше рекомендую прочитать цикл статей — (я их воедино собрал, линк на первоисточники вконце дока).
Спасибо, попробую этот способ. Просто раньше я не знал как внедрить цикл при передаче множества файлов по фтп.
Не за что :)
есть еще полезная опция у архиватора tar -T
tar -cvf 123.tar -T list.txt
,где в файле list.txt список всех путей к папкам/файлам которые будут добавлены в архив 123.tar
хороший скриптик, забираю