我需要使我的网页与本地目录保持同步。一个非常有效的工具是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客户端)远程删除文件列表从文件中获取列表。
以下内容未经测试,来自阅读文档并根据内容进行调整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
Run Code Online (Sandbox Code Playgroud)
使用它们。您可以在本地计算机上保留不想远程删除的文件、文件夹或通配符(通配符)列表,然后告诉lftp
忽略其中的所有内容,这将隐式地不会在远程端删除它(除非您使用--delete-excluded
转变 ...)。这些东西不需要出现在本地(如果它rsync
在这方面表现得像)。