为什么 LFTP 在镜像中“删除旧文件”?

为什么 LFTP 在镜像中“删除旧文件”?

我正在尝试使用 LFTP 镜像一个网站(我是网站管理员),以进行备份。

我使用 LFTP 命令(出于隐私考虑,对实际路径、用户名和密码进行了编辑):

mirror -e -p --verbose=1 /public_html /mnt/lobster3raid/<path>/public_html

它正在工作,只是 LFTP 正在从镜像中删除每个文件,然后重新传输它,即使它在网络服务器上没有更改(我每次都在每个文件上得到这个):

Removing old file `<path>/IMG_2003.jpg'
Transferring file `<path>/IMG_2003.jpg'
Removing old file `<path>/IMG_2004.jpg'
Transferring file `<path>/IMG_2004.jpg'
Removing old file `<path>/IMG_2005.jpg'
Transferring file `<path>/IMG_2005.jpg'

如何运行仅传输已更改/较新文件的 LFTP 镜像?

更多背景:

目标镜像位于 Windows 共享上 \\LOBSTER3\raid。我正在 Windows 上执行此操作。我用 Cygwin 的 LFTP 工作了一段时间,但最近遇到了来自 Windows 的权限问题(显然 Cygwin 的 LFTP 设置了 Windows 不喜欢的权限)。

所以我现在在 wsl (Ubuntu) 中使用 LFTP。我从 Windows 运行这个批处理文件:

wsl -u root -- mkdir /mnt/lobster3raid
wsl -u root -- mount -t drvfs \\\\lobster3\\raid /mnt/lobster3raid
wsl -- lftp -u <username>,<password> <url> -e 'set ssl:check-hostname no; mirror -e -p --verbose=1 /public_html /mnt/lobster3raid/mirrors/1day/public_html'

答案1

如果您使用不带任何选项的镜像命令,它将把所有文件从源传输到目标,无论它们是否已存在于目标上。这是因为镜像的默认行为是覆盖目标上的现有文件确切地复制源文件树。

您正在寻找的选项是--only-newer.它将仅重新上传较新的文件,如ftp 文档

因此,在您的情况下,批处理文件应如下所示:

wsl -u root -- mkdir /mnt/lobster3raid
wsl -u root -- mount -t drvfs \\\\lobster3\\raid /mnt/lobster3raid
wsl -- lftp -u <username>,<password> <url> -e 'set ssl:check-hostname no; mirror -e -p --verbose=1 --only-newer /public_html /mnt/lobster3raid/mirrors/1day/public_html'

相关内容