vatolkin (vatolkin) wrote in ru_shell,
vatolkin
vatolkin
ru_shell

bash скрипты для ftp

Встала передо мной задача - нужно было собранные бэкапы заливать на удаленный сервер, попутно удаляя с него лишние бэкапы.

Возможно кому-нибудь ещё пригодятся эти скрипты, так что далее с небольшими комментариями:

Первый скрипт находит список подпапок в директории (в моём случае /backup), и из каждой из них копирует последний бєкап на удаленный сервер. При этом на удаленном сервере всё складывается в одну директорию.
#!/bin/sh
for user in `/bin/ls /backup/`
do
/usr/bin/ftp -u ftp://login:password@backup.example.com/last/`/bin/date +%Y-%m-%d`-$user.tar.gz /backup/$user/*-`/bin/date +%Y-%m-%d`.tar.gz
done


Второй - удаляет файлы с фтп. Нет погодите, так было бы слишком просто, второй скрипт будет только листинг директории фтп брать. Кстати, его автор - не я. Он был найден в уже готовом виде:
# cat /root/ftplist.sh
#!/bin/sh
hostname="ftp://$1:$2@$3/"
ftp $hostname << EOF
cd last
ls -1R
EOF


Третий - запускает второй скрипт с нужными параметрами, и фильтрует вывод. В результате остаётся только список файлов подлежащих удалению (т.е. все файлы, кроме содержащих сегодняшнюю дату):
# cat /root/ftplistold.sh
#!/bin/sh
/root/ftplist.sh login password backup.example.com | /usr/bin/grep '^-' | /usr/bin/awk '{print $9}' | /usr/bin/grep -v `/bin/date +%Y-%m-%d`


Ну и наконец четвертый скрипт - будет у третьего получать список файлов для удаления, и непосредственно удалять на фтп-сервере:
#!/bin/sh
echo open backup.example.com > /tmp/ftpbackuplist
echo user login password >> /tmp/ftpbackuplist
echo cd last >> /tmp/ftpbackuplist
for a in `/root/ftplistold.sh`
do
echo "delete /last/"$a >> /tmp/ftpbackuplist
done
FTPCMDS=`/bin/cat /tmp/ftpbackuplist`
/bin/rm /tmp/ftpbackuplist
/usr/bin/ftp -inv << EOF
$FTPCMDS
EOF


Вот собственно и всё. Если запускать чистилку до полуночи - а копировалку после, то на резервном сервере будет лежать 2 комплекта бэкапов. Если оба скрипта запускать после полуночи - то только один комплект.
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 3 comments
Я думаю, лучше бекапы сливать/заливать/удалять с помощью rsync. Решение использовать FTP довольно неожиданно и совершенно неоправданно. Нет, правда. Впрочем, хорошо ещё что не телнет используете ;)
Было бы конечно неплохо использовать "продвинутую" синкалку, но в моём случае дата-центр давал доступ только по ФТП.
Hmmm for some reason only half the post can be seen. I tried reloading but still same.