Мне нужно синхронизировать свою веб-страницу с локальным каталогом. Очень действенный инструмент - 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
в этом отношении).