Синхронизация по FTP

Иногда возникает необходимость сделать копию удалённого ресурса через FTP. Для Linux имеется замечательный инструмент - lftp. Пример скрипта:

#!/bin/bash
HOST='ftp-server.com'
USER='root'
PASS='Qwerty123'
TARGETFOLDER='/mnt/backup'
SOURCEFOLDER='/'

lftp -f "
open $HOST
user $USER $PASS
lcd $SOURCEFOLDER
mirror --use-cache --verbose $SOURCEFOLDER $TARGETFOLDER -e -x ^\..+/$ -x ^trash/
bye
"

В результате из корня серврера ftp-server.com сливается всё, за исключением скрытых директорий (-x ^\..+/$), а так же директории trash, лежащей в корне сервера (-x ^trash/).

Ключи:

  • -e - удалить из локальной директории всё то, чего нет на удалённом сервере;
  • -x - позволяет задать исключения из обработки, что позволяет не скачивать лишнего с сервера, а так же позволяет сохранить в локальной копии то, чего нет на удалённом сервере при использовании ключа -e, воспринимает параметр как регулярное выражение (т.е. ^trash/ исключит папку в корне сервера, а trash исключит всё, что содержит в пути данную комбинацию);
  • -R - этот ключ позволяет загружать данные из локальной директории на FTP-сервер.