我一直在编写一个lftp脚本,它应该有效地将远程目录镜像到本地目录,可能一次传输多个千兆字节的文件。
其中一个要求是本地用户可以在不再需要时删除本地文件,因为我将有多台“本地”计算机运行此脚本,我不想删除远程文件,直到我知道每个需要它的人,有它。因此,脚本使用--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 /目录中的任何内容,包括比last.run文件的时间戳更新的共享/目录本身。
这可以正常工作,除了在一个案例中我说在share /中有另一个特别命名的目录/名为shareWHATEVER /
所以share / shareWHATEVER / stuff.txt存在。
第一次运行时,shareWHATEVER / stuff.txt被远程复制到本地,一切都很顺利。
如果我在本地完全删除shareWHATEVER目录,包括stuff.txt,那么下次脚本运行时,stuff.txt它没有镜像,但是shareWHATEVER是,即使远程服务器上的时间戳没有改变。
所以本地看起来像share / shareWHATEVER /目录为空。
任何想法为什么shareWHATEVER被复制,即使它自己的时间戳或其任何文件的时间戳都不是 - 比我的本地检查更新?
感谢。
答案 0 :(得分:0)
显然,即使没有复制文件也可以创建目录lftp
的工作方式(而mirror
选项--no-empty-dirs
不会改变此行为。)
您可以在lftp mailing list中讨论这个问题。