Встала задача синхронизировать папки по ftp.
Еслиб можно было синхронизировать по ssh, то использовал бы конечно rsync.
Выбор пал на самый простой вариант для nix систем - lftp
1. Установить lftp если его нет в системе
Использовать ее крайне легко. Синхронизация текущей папки с папкой на удалённого сервера (синхронизировать локальный каталог с удалённым), т.е. закачка с сервера.
Синхронизация папки на удалённом сервере с текущей папкой (синхронизировать удалённый каталог с локальным), т.е. закачка на сервера.
Наиболее оптимальное использование опций для синхронизации папки на удалённом сервере с текущей папкой (синхронизировать удалённый каталог с локальным), т.е. закачка на сервера.
Можно также использовать скрипты, например запуск команды
Где в скрипте находятся следующие данные:
Конфигурация.
Конфигурационный файл .lftprc, предсталяет собой просто команды lftp которые даются ему перед запуском.
Основные установки производятся командой set (да-да, про них тоже есть в help'е).
Например пара строк, позволяющих лазить свободно на виндовые ФТП, с русскими именами файлов:
Полезные параметры:
-e commands - выполняет команду и не завершает соединение
-f script_file выполняет команды из файла и завершает соединение
-c commands выполняет команду и завершает соединение
mget filename позволяет скачать файл filename, опция -c как и в в wget'е позволяет "докачать" файл.
mirror dirname позволяет скачать директорию. mirror -c - докачать директорию.
-c продолжать задание копирования, если это возможно
--parallel[=N] -закачка параллельно N файлов
--verbose[=level] информативность вывода.
--no-symlinks Исключать симлинки
--no-empty-dirs -исключать пустые папки
--only-newer - копировать только новые файлы, сравнение размеров игнорируется. Старые заменяются новыми.
--loop - будет работать "по кругу", пока есть какие-то изменения
--exclude - исключить список файлов (регулярное выражение, как в egrep)
--include - включая список файлов регулярное выражение, как в egrep)
--exclude-glob - исключить список файлов по образцу (например '*.zip')
--include-glob - включить список файлов по образцу (например '*.zip')
--log=FILE - писать выполняемые команды в FILE
--just-print, --dry-run - тоже самое, что --script=FILE. Позволяет просмотреть, какие команды будут выполнены
--script=FILE - пишет в FILE командны, но не авполняет их
Также, как альтернативу можно рассмотреть программу, написанную на perl - FTPSync, т.к. при необходимости ее можно достаточно просто переделать под себя или добавить нужный функционал. Есть хорошая статья по ее использованию - FTPSync. FTP-синхронизация без проблем.
Примечание: Если Вы передаете важные файлы в больших объемах, то лучше использовать другие средства синхронизации, например rsync, т.к. работает быстрее и надежнее, а также имеет функцию проверки хеша фалов!. Грустный опыт показал, что скопированный файл имеющий размер идентичный исходному, может отличаться от него, что собственно и подтверждают их хеши :(. Вот Вам и надежная передача по TCP... Когда сам столкнулся с таким моментом, был очень сильно удивлен, т.к. считал, что в принципе такого быть не должно.
Ссылки:
Офф. сайт
Быстрое обновление проектов на клиентских серверах через FTP Использование lftp
Синхронизация каталогов по SSH и по FTP
lftp. Usage.
FTPSync. FTP-синхронизация без проблем
Еслиб можно было синхронизировать по ssh, то использовал бы конечно rsync.
Выбор пал на самый простой вариант для nix систем - lftp
1. Установить lftp если его нет в системе
# Debian
apt-get install lftp
# Red Hat
yum install lftp
# Gentoo
emerge lftp
# FreeBSD
pkg_add -r lftp
Использовать ее крайне легко. Синхронизация текущей папки с папкой на удалённого сервера (синхронизировать локальный каталог с удалённым), т.е. закачка с сервера.
$ lftp -e 'mirror -e каталог-на-сервере локальный-каталог; bye;' -u логин,пароль удалённый.хост
Синхронизация папки на удалённом сервере с текущей папкой (синхронизировать удалённый каталог с локальным), т.е. закачка на сервера.
$ lftp -e 'mirror -R локальный-каталог каталог-на-сервере; bye;' -u логин,пароль удалённый.хост
Наиболее оптимальное использование опций для синхронизации папки на удалённом сервере с текущей папкой (синхронизировать удалённый каталог с локальным), т.е. закачка на сервера.
$ lftp -e 'mirror --verbose -с -R локальный-каталог каталог-на-сервере; bye;' -u логин,пароль удалённый.хост
Можно также использовать скрипты, например запуск команды
lftp -f sync_script.x
Где в скрипте находятся следующие данные:
open логин:пароль@удалённый.хост
mirror -R локальный-каталог каталог-на-сервере
exit
Конфигурация.
Конфигурационный файл .lftprc, предсталяет собой просто команды lftp которые даются ему перед запуском.
Основные установки производятся командой set (да-да, про них тоже есть в help'е).
Например пара строк, позволяющих лазить свободно на виндовые ФТП, с русскими именами файлов:
set ftp:charset cp1251
set mirror:set-permissions off
set ftp:use-telnet-iac no
а так же несколько алиасов, команд, для более быстрого набора этого дела:
alias 5.7 open 192.168.5.7
alias sserv open 192.168.61.193
alias localhost open 127.0.0.1
Полезные параметры:
-e commands - выполняет команду и не завершает соединение
-f script_file выполняет команды из файла и завершает соединение
-c commands выполняет команду и завершает соединение
mget filename позволяет скачать файл filename, опция -c как и в в wget'е позволяет "докачать" файл.
mirror dirname позволяет скачать директорию. mirror -c - докачать директорию.
-c продолжать задание копирования, если это возможно
--parallel[=N] -закачка параллельно N файлов
--verbose[=level] информативность вывода.
--no-symlinks Исключать симлинки
--no-empty-dirs -исключать пустые папки
--only-newer - копировать только новые файлы, сравнение размеров игнорируется. Старые заменяются новыми.
--loop - будет работать "по кругу", пока есть какие-то изменения
--exclude - исключить список файлов (регулярное выражение, как в egrep)
--include - включая список файлов регулярное выражение, как в egrep)
--exclude-glob - исключить список файлов по образцу (например '*.zip')
--include-glob - включить список файлов по образцу (например '*.zip')
--log=FILE - писать выполняемые команды в FILE
--just-print, --dry-run - тоже самое, что --script=FILE. Позволяет просмотреть, какие команды будут выполнены
--script=FILE - пишет в FILE командны, но не авполняет их
Также, как альтернативу можно рассмотреть программу, написанную на perl - FTPSync, т.к. при необходимости ее можно достаточно просто переделать под себя или добавить нужный функционал. Есть хорошая статья по ее использованию - FTPSync. FTP-синхронизация без проблем.
Примечание: Если Вы передаете важные файлы в больших объемах, то лучше использовать другие средства синхронизации, например rsync, т.к. работает быстрее и надежнее, а также имеет функцию проверки хеша фалов!. Грустный опыт показал, что скопированный файл имеющий размер идентичный исходному, может отличаться от него, что собственно и подтверждают их хеши :(. Вот Вам и надежная передача по TCP... Когда сам столкнулся с таким моментом, был очень сильно удивлен, т.к. считал, что в принципе такого быть не должно.
Ссылки:
Офф. сайт
Быстрое обновление проектов на клиентских серверах через FTP Использование lftp
Синхронизация каталогов по SSH и по FTP
lftp. Usage.
FTPSync. FTP-синхронизация без проблем
текст в рамках обрезался :(
ОтветитьУдалитьНеплохой обзор. Вообще, у таких программ куча особенностей. И это не только синхронизация по ftp. Например, как именно программы решают конфликтные ситуации с файлами. Допустим, один и тот же файл изменили в обоих местах. Как именно поступит программа. И так далее.
ОтветитьУдалитьЕсли вам интересно, то более подробно можно ознакомиться по адресу http://ida-freewares.ru/best-free-folder-synchronization-utility.html
ссыль не в тему
УдалитьСорри, но синхронизация это не скачка и не закачка. Синхронизация это еще и удаление ненужных файлов. Делает такое lftp? Нет? Кто делает?
ОтветитьУдалить