通过 FTP 进行选择性镜像

通过 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 客户端)远程删除文件列表并从文件中提取列表。

答案1

以下内容未经测试,来自阅读文档并使其适应实际情况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

使用它们。您可以保留一份您不想在本地计算机上远程删除的文件、文件夹或 glob(通配符)列表,然后告诉它们lftp忽略其中的所有内容,这隐含地不会在远程端删除它们(除非您使用开关--delete-excluded...)。这些东西不应该需要存在于本地(如果它rsync在这方面表现得像的话)。

相关内容