Назад | Перейти на главную страницу

Выборочное зеркалирование через FTP

Мне нужно синхронизировать свою веб-страницу с локальным каталогом. Очень действенный инструмент - lftp, который я использую со скриптом:

   #!/bin/bash
   HOST='ftp.remote.it'
   USER='username'
   PASS='password'
   TARGETFOLDER='.'
   BASEFOLDER='/home/my/folder/'
   SOURCEFOLDER='_site'

   cd $BASEFOLDER || exit
   lftp -f "
   open $HOST
   user $USER $PASS
   mirror --reverse --only-newer --ignore-time --delete \
          --verbose $SOURCEFOLDER $TARGETFOLDER
   bye
   "

Используя опцию --delete Я убеждаюсь, что когда я удаляю файл локально, соответствующий файл также удаляется удаленно. Однако на веб-сайте я размещаю дополнительные материалы, которые поступают не с локального веб-сайта и которые я не хочу удалять, когда делаю обновление (эффект --delete в том, что все в удаленной папке и подпапках, не существующих в локальной папке, удаляется).

Решением может быть сохранение списка файлов, существующих в локальной папке при последнем обновлении; затем, сравнивая локальный каталог со списком, я могу получить список удаленных файлов. Таким образом, зеркальное отображение локального веб-сайта происходит в два этапа: сначала я удаляю файлы на веб-сайте, соответствующие локально удаленным файлам, затем я загружаю все обновленные и новые файлы, используя lftp без опция --delete.

Однако, к моему удивлению, я не нашел способа заставить lftp (или любой другой ftp-клиент) удалить список файлов удаленно, взяв список из файла.

Следующее не проверено и вытекает из чтения док и адаптируя его к тому, что rsync делает.

Согласно странице руководства, mirror имеет следующие параметры:

        -i RX,   --include=RX               include matching files
        -x RX,   --exclude=RX               exclude matching files
        -I GP,   --include-glob=GP          include matching files
        -X GP,   --exclude-glob=GP          exclude matching files
                 --include-rx-from=FILE
                 --exclude-rx-from=FILE
                 --include-glob-from=FILE
                 --exclude-glob-from=FILE   load include/exclude patterns from the file, one per
                                            line

Используй их. Вы можете сохранить список файлов, папок или глобусов (подстановочных знаков), которые вы не хотите удалять удаленно на вашем локальном компьютере, и просто указать lftp игнорировать все, что там есть, что неявно не удалит его на удаленной стороне (если вы не используете --delete-excluded переключатель ...). Материал не должен присутствовать локально (если он ведет себя как rsync в этом отношении).