【发布时间】:2012-12-17 06:56:33
【问题描述】:
我一直在编写一个 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 被复制,即使它自己的时间戳或其任何文件的时间戳都不比我的本地检查更新?
谢谢。
【问题讨论】:
标签: linux bash shell mirror lftp