我正在使用 wget 来镜像 ftp 文件档案。
这是我的命令:(
wget -m $mirror
删除所有不必要的参数)
到目前为止,一切都正常,与在线档案的所有差异都将被同步。
但现在,有一个脚本会从我的副本中删除不需要的文件。因此,如果我再次启动 wget,它也会重新下载这些文件(几 GB!)。
是否有选项可以从下载中排除早于特定时间戳的文件?
我已经查看了-A -R -I -X
参数,但它们似乎只适用于文件名......
答案1
读到你的问题时,我的第一个念头是“这看起来像是 的工作rsync
!”。不幸的是,虽然它rsync
确实可以一跃而过高楼,但它无法处理 FTP。如果你有镜像的 ssh 访问权限,事情就会容易得多。
假设你没有,你可以尝试在本地挂载远程 FTP 目录,然后你可以使用简单的cp
(灵感来自这):
安装 curlftpfs。如果你使用的是基于 Debian 的发行版(我假设你使用的是 Linux,因为你提到了
wget
),请运行apt-get install curlftpfs
创建本地挂载路径
mkdir -p /mnt/myftp
使用以下方式挂载目标 ftp 站点
curlftpfs
curlftpfs -o allow_other ftp://user:[email protected] /mnt/myftp
用于
cp
复制文件,并将命令find
作为参数传递:cd /mnt/myftp && \ cp -v --parents `find . -type f -mtime -20` ~/foo/
解释:
- 命令
find
将查找所有文件(-type f
)在远程 FTP 服务器中修改的时间 <=20 天前(-mtime 20
)。 - 该
cp
命令将复制这些文件- 如果它们比目标目录中的相应文件更新(
-u
) - 保留其父目录(
--parents
)
- 如果它们比目标目录中的相应文件更新(
该
cd /mnt/myftp
位是必需的,以便cp
在目标文件夹中创建正确的父目录。如果您不cd
先进入 ftp 目录,cp
将创建如下文件夹:~/foo/mnt/myftp/bar
而不是这样:
~/foo/bar
结合起来,这些命令/选项应该具有镜像远程服务器同时忽略旧文件的预期效果。
注意事项:
这是一个相对简单的案例。如果您有更高级的要求(所有wget
您遗漏的选项),您可能需要查看,man cp
或者,对于更高级的选项,man rsync
。您将能够通过使用 的选项传递命令的结果来执行基本相同的rsync
操作。find
rsync
--include-from
如果您用更具体的要求(保留链接、硬链接、时间戳、用户权限、目录递归等)更新您的问题,我应该能够修改我的答案以适合它们。