我需要使我的网页与本地目录保持同步。一个非常有效的工具是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
"
Run Code Online (Sandbox Code Playgroud)
通过使用该选项,--delete我确保当我在本地删除文件时,相应的文件也会被远程删除。但是,在网站上,我放置了并非来自本地网站的其他内容,并且在进行更新时我不想删除这些内容(其效果是,--delete本地文件夹中不存在的远程文件夹和子文件夹上的所有内容都是已删除)。
解决方案可能是保留上次更新时本地文件夹中存在的文件列表;然后,通过将本地目录与列表进行比较,我可以获得已删除文件的列表。这样,本地网站的镜像分两步:首先删除本地删除的文件对应的网站上的文件,然后使用lftp 不带选项的方式上传所有更新的和新的文件--delete。
然而,令我惊讶的是,我发现没有办法让lftp(或任何其他ftp客户端)远程删除文件列表从文件中获取列表。