Как синхронизировать файлы по FTP из командной строки

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

Об этом и об утилите которая помогла мне превосходно справиться с данной задачей я расскужу в данной статье.


Задача была скопировать 50Гб пользовательских картинок, рассортированых по множеству директорий внутри папки images, с сервера в облачное хранилище доступное только по FTP.

lftp — консольный FTP-клиент для UNIX и UNIX-подобных операционных систем, распространяется по лицензии GNU GPL.

Кроме FTP программа также поддерживает протоколы FTPSHTTPHTTPSHFTPFISH и SFTP, используемый протокол автоматически определяется из URL-ссылки. Одно из достоинств программы Lftp — поддержка протокола FXP: передачи данных между двумя FTP-серверами без участия компьютера клиента. С помощью команды torrent можно задействовать встроенный BitTorrent-клиент.

Lftp относится к мощным FTP-клиентам, он имеет такие функции как рекурсивное зеркальное копирование дерева каталогов, автоматическое возобновление прервавшейся загрузки, выставление закладок для файлов и каталогов, и многое другое. Загрузка файлов в назначенное время, ограничение скорости загрузки, очереди загрузки. Контроль процесса загрузки в UNIX-подобной командной оболочке, либо автоматизация процесса скриптами. [Источник Wikipedia]

Самой важной функцией, в данном случае, является «рекурсивное зеркальное копирование дерева каталогов«, которая позволит нам скопировать все директории с контентом.

Приступим:

NOTE! В дальнейшим сервер с которого будем заливать картинки будет так же называться — локальный-сервер.

  1. Открываем соединение с сервером.

    После выполнения данной команды мы попадаем в командную строку утилиты lftp. В связи с чем нужно учитывать особенности перемещения и отображения информации о текущем каталоге. Небольшая справка:
    ls — выводит информацию о содержимом удалённого каталога, расположенного на FTP-сервере;
    lpwd — выводит текущий каталог на локальном-сервере;
    cd — переходит по каталогам на FTP-сервере;
    lcd -переходит по каталогам на локальном-сервере.
  2. Переходим в нужный каталог на локальном-сервере.
  3. Переходим в нужный каталог на FTP-сервере.
  4. Ввыдим команду копирования.

    WARNING!!! По умолчинию копирование происходит С FTP-сервера НА локальном-сервер, чтобы изменить направления копирования необходим флаг--reverse. Будьте внимательны, так как в сочетании с флагом --delete, можно потерять данные на локальном-сервере!!!

    Данная команда рекурсивно скопироет все файлы и директории с текущего каталока на локальном-сервере в текущий коталог на FTP-сервере.
    где:
    --reverse — обратное копирование на зеркало, т.е. с локального-сервера на FTP-сервер;
    --delete — удалять файлы которых нет на сервере с которого происходит копирование;
    --use-cache — использовать кешированый листинг директории из которой происходит копирование;
    --verbose[=level] — задаёт уровень выводимой информации о процессе копирования, по умолчанию выводит максимально подробную информацию;
    --allow-chown — разрешить изменять пользователя и группу владельцев файлов на FTP-сервер;
    --allow-suid — устанавливать suid/sgid bits в соответствии с источником;
    --no-umask — не применять umask к правам файлов;
    --parallel[=N] — паралельно загружать N файлов;
    --exclude-glob=GP — исключить файлы подходящие под шаблон, GP это glob pattern, например `*.zip’.
    Со всеми доступными параметрами можно ознакомиться на официальном сайте программы.

    Так же пути копирования можно указывать последними аргументами команды. Например скопировать директорию photos с текущего каталога локального-сервера в текущий каталог на FTP-сервере:

lftp достаточно мощная и функциональная утилита, которая подойдёт для решения множества задачь связвных с передачей данных данных про протоколам FTPFTPSHTTPHTTPSHFTPFISH и SFTP, например умеет отложенный старт при помощи встроенной поддержке утилиты at. К счатью, имеется очень подробная официальная документация, так что вы обязательно найдёте там решения под вашу задачу.


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *