我需要使我的网页与本地目录保持同步。一个非常有效的工具是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
在这方面表现得像的话)。