$put_perv_real = "/home/www/dvakompa-ru/dopol/"; ?>
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... Когда сам столкнулся с таким моментом, был очень сильно удивлен, т.к. считал, что в принципе такого быть не должно.