Синхронизация локальной папки с удаленным каталогом по FTP

20

На работе появилась задача настроить синхронизацию определенных папок (локальных) с точно такими же папками на удаленном сервере. У меня на руках были доступы к удаленной папке и большое желание автоматизировать все это.

В начале была мысль настроить FTP клиент менеджеру, который собственно должен следить за актуализацией каталогов, после чего менеджер сам бы проверял и синхронизировал каталоги. Но возникло много противоречий, менеджер может забЫть, а может забИть. В общем решено было настроить автоматическую синхронизацию.

Программа для синхронизации по FTP

Не долго я искал инструмент для поставленной задачи, в основном попадались платные программы, причем их стоимость была от 10К и выше, такие варианты сразу отметались. На одном из форумов нашел упоминание про WinSCP, это ftp клиент с возможностью синхронизации. Программа бесплатна, на родном языке, что еще нужно для счастья? Решил попробовать…

Скачать WinSCP клиент для Windows(размер файла - 5.91 Mb)

Установил программу, запустил, добавил новое подключение и подключился к удаленному каталогу

Синхронизация локального каталога с ftpПосле подключения, моему взору предстал удобный, двухпанельный файловый менеджер. На одной стороне я открыл локальную папку с нужными каталогами, на другой стороне открыл удаленную папку

Синхронизация локального каталога с ftp 2Для начала синхронизации нужно выбрать пункт меню «Команды» — «Синхронизация» или с помощью горячих клавиш Ctrl+S

Синхронизация локального каталога с ftp 3Выбрав направление синхронизации и указав остальные параметры, жмем «ОК» и наслаждаемся. Все работает отлично, очень шустро и стабильно. В принципе, можно было бы все настроить и заставить менеджера пару раз в час нажимать на кнопку «Синхронизация», но это тупиковый путь… Нужно все по максимуму автоматизировать.

Автоматическая синхронизации локальной папки с FTP через терминал

Совершенно случайно узнал что эта программа умеет работать с командной строкой, а настроить автоматическую синхронизацию на самом деле можно за 2 минуты! Это как раз то, что мне нужно.

Для начала нужно создать текстовый фал с настройками для подключения, вот как он выглядит в моем случае:

Соответственно, вышеуказанные значения меняете на свои:

user — имя пользователя для подключения к FTP;

password — пароль для пользователя;

ftpserver — адрес сервера, к которому подключаемся;

C:\temp\BAT\synchro\KMS\ — путь к локальной папке;

/ — путь к удаленной папке (в моем случае корневая папка).

Вносим свои значения и сохраняем с именем sync-config.txt (ну или любое другое название на ваше усмотрение)

Теперь нужно создать второй файл, который будет запускать синхронизацию. Создайте файл synhro.bat и откройте его с помощью блокнота, после чего внесите в него следующую информацию:

первая половина — путь к установленной программе, обязательно проверьте чтобы он был правильным, во второй части файла путь к файлу конфигурации, который мы с вами уже создали. После сохранения, у вас в каталоге должно появиться два файла

Синхронизация локального каталога с ftp 4Запустите файл synhro.bat и если все вышеописанное вы сделали правильно, должна начаться синхронизация, выглядит это примерно так:

Синхронизация локального каталога с ftp 5Отлично! Теперь сверим каталог на FTP и каталог который синхронизировался у вас на компьютере. В моем случае все синхронизировалось успешно! Уверен что и у вас все получится так же.

И так, был создан файл, при запуске которого автоматически синхронизируется нужный нам каталог. Теперь осталось добавить этот файл в запуск по расписанию, с запуском каждые 30 минут, например. Для этого открываем «Планировщик заданий» и создаем новое задание. Не буду описывать создание нового задания в планировщике, все там просто и понятно, акцентирую внимание только на настройке триггера (время запуска задания), для запуска каждые 30 минут, настроить вам его нужно как на картинке

Синхронизация локального каталога с ftp 6На это всё! Надеюсь что расписал все подробно. Но если вдруг какой то момент остался непонятным пишите в комментарии, обещаю что смогу вам помочь.

Комментарии:


  • Инсаф

    А если мне хочется синхронизировать не ток одно а нескоко папок, как тогда …?

    • Иван

      Сделать несколько батников

  • Николай

    Голову сломал не могу понять, как с помощью этой программы сделать _перемещение_ файлов с FTP в локальный каталог???

    • Иван

      Как раз такой тип синхронизации в статье и описан. Что именно не получается?

      • Николай

        Файлы на сервере не удаляются. Или может быть они должны удаляться после того как все с копируются?
        У меня проблема ужасно медленный интернет и куча малюсеньких файлов общим объемом почти 2 гигабайта, мне надо чтобы после того как один файл с копируется он сразу удалялся на ftp, т.е. происходило перемещение с ftp в локальный катало.

        • Иван

          А ну так это совсем другая задача. В статье описан механизм синхронизации, т.е. на сервере есть папка, при добавлении или удаления файлов в этой папке, в локальной папке должна отображаться та же карина. Либо наоборот (в зависимости от настроек). Для вашей задачи такой метод не подойдет

          • Николай

            Может быть подскажи те другой вариант?

          • Иван

            Как вариант, сделать батник который будет подключаться к вашему FTP, скачивать содержимое нужной папки, после успешного скачивания удалять содержимое папки.
            Гуглите на тему «bat ftp», «скачивание с ftp bat», «забрать файлы с ftp с последующим удалением».
            Ну и само собой в командной строке напишите ftp, а после help. Почитайте стандартные команды ftp.

  • Александр

    Если мне нужно не с сервера а на сервер загружать?

  • https://plus.google.com/117940233835377381766 Иван Малышев

    В первом BAT файле, вместо local указать remote

  • Артур

    А если я удаляю файлы из локальной папки, то при последующей синхронизации они восстанавливаются их удаленной. Как сделать так, что бы если я удалил в локальной то при синхронизации удалялись и в удаленной. Но если удалил в удаленной то потом восстановилось из локальной.

  • https://plus.google.com/117940233835377381766 Иван Малышев

    Никак, даже если вы настроите два скрипта для синхронизации локальной и удаленной папки, они будут конфликтовать. Поэтому либо так, либо так

  • Артур

    Почему то ничего не происходит какие могут быть проблемы? Один раз все синхнронизировалось как надо, второй раз не хочет, просто командай строка моргает на секунду, и сразу изчезает ничего не происходит

  • https://plus.google.com/117940233835377381766 Иван Малышев

    Нужно понять что пишет скрипт, для этого добавьте последней строкой pause
    Таким образом окошко не закроется пока вы не нажмете любую клавишу

  • Мурат

    тут отвечают еще?

  • https://plus.google.com/117940233835377381766 Иван Малышев

    Конечно! Какой у вас вопрос?

  • Андрей

    Доброго времени суток. В целом всё отлично, синхронизация работает как нужно. Но возникла необходимость исключить из синхронизации ряд подкаталогов, которые для меня уже не актуальны на локальной машине, да и размер локального каталога для синхронизации уже порядком раздулся. Есть ли возможность это реализовать? Маски как я понял работают только для файлов.

    • https://plus.google.com/117940233835377381766 Иван Малышев

      Увы не знаю, почитайте документацию на их офф сайте, возможно в ней найдете ответ https://winscp.net/eng/docs/start

      • Андрей

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

        • https://plus.google.com/117940233835377381766 Иван Малышев

          Жаль что не смог помочь, если возникнут другие вопросы, обращайтесь с удовольствием помогу

Присоединяйся к нам