2

我一直在编写一个 lftp 脚本,该脚本应该有效地将远程目录镜像到本地目录,可能一次传输多个 GB 文件。

要求之一是本地用户可以在不再需要本地文件时删除它,并且由于我将有多个“本地”计算机运行此脚本,所以我不想删除远程文件,直到我知道每个人需要,有。因此,该脚本使用 --newer-than 标志仅镜像自上次 lftp 脚本在本地运行以来在远程服务器上新建/修改的文件。

这是脚本的重要部分:

lftp -u $login,$pass $host << EOF
set ftp:ssl-allow yes
set ftp:ssl-protect-data yes
set ftp:ssl-protect-list yes
set ftp:ssl-force yes
set mirror:use-pget-n 5

mirror -X * -I share*/* --newer-than=/local/file/last.run --continue --parallel=5 $remote_dir $local_dir

quit
EOF

请注意,EOF 并不是 bash 脚本的实际结尾。

所以我排除了 $remote_dir 中的所有内容,除了 share/ 目录中的任何内容,包括 share/ 目录本身,它们比 last.run 文件的时间戳更新。

这可以按预期工作,除非在一种情况下说我在 share/ 中有另一个特别命名的目录,称为 shareWHATEVER/

所以 share/shareWHATEVER/stuff.txt 存在。

第一次运行,shareWHATEVER/stuff.txt被远程复制到本地,一切正常。

如果我在本地完全删除 shareWHATEVER 目录,包括 stuff.txt,那么下次脚本运行时,stuff.txt 它不会被镜像,但 shareWHATEVER 是,即使远程服务器上的时间戳没有更改。

所以在本地它看起来像 share/shareWHATEVER/ 目录是空的。

知道为什么 shareWHATEVER 被复制,即使它自己的时间戳或其任何文件的时间戳都不比我的本地检查更新?

谢谢。

4

1 回答 1

0

显然,即使没有文件被复制,创建目录也是可行的方式lftp(并且该mirror选项--no-empty-dirs不会改变这种行为)。

您可以在lftp 邮件列表中讨论这个问题。

于 2013-09-02T12:48:13.127 回答